[cmor] 01/190: initial repo for cmor 2.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Tue Jul 21 12:54:14 UTC 2015


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to branch debian/master
in repository cmor.

commit f5d1cdf99fb171103647bfb39c574470778b4c90
Author: Doutriaux <doutriaux1 at meryem.llnl.gov>
Date:   Thu Apr 29 10:22:34 2010 -0700

    initial repo for cmor 2.0
---
 Doc/IPCC_output_requirements.htm                   |  3381 ++++
 Doc/IPCC_output_requirements.pdf                   |   Bin 0 -> 111256 bytes
 Doc/cmor_users_guide.doc                           |   Bin 0 -> 361472 bytes
 Doc/cmor_users_guide.htm                           | 16628 +++++++++++++++++++
 Doc/cmor_users_guide.pdf                           |   Bin 0 -> 554019 bytes
 Doc/cmor_users_guide_files/filelist.xml            |     5 +
 Doc/cmor_users_guide_files/header.htm              |   122 +
 Doc/standard_output.html                           |  5561 +++++++
 Doc/standard_output.pdf                            |   Bin 0 -> 107820 bytes
 Doc/standard_output_updates.htm                    |   256 +
 INSTALL                                            |   105 +
 Lib/__init__.py                                    |     9 +
 Lib/check_CMOR_compliant.py                        |  1569 ++
 Lib/cmor_const.py                                  |    41 +
 Lib/gen_table_md5s.py                              |    37 +
 Lib/pywrapper.py                                   |   903 +
 Lib/table_generator.py                             |   415 +
 Makefile.in                                        |   225 +
 RELEASE-NOTES                                      |   114 +
 Src/_cmormodule.c                                  |   781 +
 Src/cmor.c                                         |  3853 +++++
 Src/cmor_axes.c                                    |  1544 ++
 Src/cmor_cfortran_interface.c                      |   481 +
 Src/cmor_fortran_interface.f90                     |  7031 ++++++++
 Src/cmor_grids.c                                   |   733 +
 Src/cmor_md5.c                                     |   309 +
 Src/cmor_tables.c                                  |   409 +
 Src/cmor_variables.c                               |  1578 ++
 Tables/CMIP5_3hr                                   |   729 +
 Tables/CMIP5_6hrLev                                |   608 +
 Tables/CMIP5_6hrPlev                               |   252 +
 Tables/CMIP5_Amon                                  |  2128 +++
 Tables/CMIP5_Limon                                 |   473 +
 Tables/CMIP5_Lmon                                  |  1484 ++
 Tables/CMIP5_Oclim                                 |   991 ++
 Tables/CMIP5_Oimon                                 |   962 ++
 Tables/CMIP5_Omon                                  |  4095 +++++
 Tables/CMIP5_Oyr                                   |  1711 ++
 Tables/CMIP5_aero                                  |  2289 +++
 Tables/CMIP5_cf3hr                                 |  2530 +++
 Tables/CMIP5_cfDa                                  |  1608 ++
 Tables/CMIP5_cfDay                                 |  1641 ++
 Tables/CMIP5_cfMon                                 |  2550 +++
 Tables/CMIP5_cfOff                                 |   506 +
 Tables/CMIP5_cfSites                               |  2106 +++
 Tables/CMIP5_da                                    |  1143 ++
 Tables/CMIP5_day                                   |  1137 ++
 Tables/CMIP5_fx                                    |   776 +
 Tables/CMIP5_grids                                 |   294 +
 Tables/md5s                                        |     1 +
 Tables_csv/3hr.csv                                 |    37 +
 Tables_csv/6hrLev.csv                              |    17 +
 Tables_csv/6hrPlev.csv                             |    17 +
 Tables_csv/add_dims.txt                            |   378 +
 Tables_csv/add_dims2.txt                           |   384 +
 Tables_csv/aero.csv                                |   102 +
 Tables_csv/amon.csv                                |    98 +
 Tables_csv/amon_2D.csv                             |    51 +
 Tables_csv/cf30min.csv                             |    48 +
 Tables_csv/cf3hr.csv                               |    57 +
 Tables_csv/cfDa.csv                                |    60 +
 Tables_csv/cfMon.csv                               |   113 +
 Tables_csv/cfOff.csv                               |    21 +
 Tables_csv/cfsites.csv                             |    46 +
 Tables_csv/da.csv                                  |    66 +
 Tables_csv/dims.csv                                |    38 +
 Tables_csv/fx.csv                                  |    26 +
 Tables_csv/llmon.csv                               |    29 +
 Tables_csv/lmon.csv                                |    75 +
 Tables_csv/oclim.csv                               |    36 +
 Tables_csv/olmon.csv                               |    53 +
 Tables_csv/omon.csv                                |     1 +
 Tables_csv/oyr.csv                                 |    92 +
 Tables_csv/oyr_tracer.csv                          |    44 +
 Tables_csv/standard_output.xlsx                    |   Bin 0 -> 254324 bytes
 Test/3D_txy.input                                  |     1 +
 Test/3D_txy_split_lon.input                        |     1 +
 Test/3D_xty_split_lon.input                        |     1 +
 Test/CMIP5_Amon_YYYYMMDDHH                         |  2080 +++
 Test/CMIP5_Amons                                   | 10929 ++++++++++++
 Test/CMIP5_cf3hr.txt                               |   230 +
 Test/CMIP5_cf3hr_0.txt                             |   185 +
 Test/CMIP5_cf3hr_1.txt                             |   185 +
 Test/CMOR_SAMPLE_TABLE                             |   860 +
 Test/Curts_table                                   |   761 +
 Test/IPCC_table_A1                                 |  2364 +++
 Test/IPCC_table_A3                                 |   545 +
 Test/IPCC_test_table_A                             |  1023 ++
 Test/IPCC_test_table_As                            | 14624 ++++++++++++++++
 Test/IPCC_test_table_Grids                         |   192 +
 Test/IPCC_test_table_O                             |   287 +
 Test/IPCC_test_table_S                             |   691 +
 Test/Sophie_Table                                  |  1021 ++
 Test/alejandro.txt                                 |     1 +
 Test/alejandro_1.txt                               |     1 +
 Test/alejandro_2.txt                               |     1 +
 Test/check_results.py                              |    51 +
 Test/climatology_test_code.f90                     |   371 +
 Test/climatology_test_table_A                      |   296 +
 Test/cmor_speed_and_compression.py                 |   161 +
 Test/cmor_speed_and_compression_01.py              |   151 +
 Test/cmor_speed_and_compression_02.py              |   184 +
 Test/in_files.py                                   |    31 +
 Test/ipcc_test_code.c                              |   446 +
 Test/ipcc_test_code.f90                            |   591 +
 Test/karls_test.f90                                |   639 +
 Test/main_prog.f90                                 |   511 +
 Test/mytest.f90                                    |   182 +
 Test/mytest_3d_i_2.f90                             |   194 +
 Test/mytest_3d_r.f90                               |   182 +
 Test/mytest_3d_r_2.f90                             |   196 +
 Test/mytest_4d_d_big_array_2.f90                   |   207 +
 Test/mytest_4d_d_big_array_3.f90                   |   207 +
 Test/mytest_4d_d_big_array_4.f90                   |   206 +
 Test/mytest_4d_d_big_array_5.f90                   |   204 +
 Test/mytest_4d_r.f90                               |   189 +
 Test/mytest_4d_r_big_array.f90                     |   204 +
 Test/nc2asc.py                                     |    84 +
 Test/noinput                                       |     2 +
 Test/old_cmor_tables/climatology_test_code.f90     |   355 +
 Test/old_cmor_tables/ipcc_test_code.f90            |   550 +
 Test/old_cmor_tables/karls_test.f90                |   604 +
 Test/old_cmor_tables/main_prog.f90                 |   472 +
 Test/old_cmor_tables/mytest.f90                    |   182 +
 Test/old_cmor_tables/mytest_3d_i_2.f90             |   194 +
 Test/old_cmor_tables/mytest_3d_r.f90               |   182 +
 Test/old_cmor_tables/mytest_3d_r_2.f90             |   196 +
 Test/old_cmor_tables/mytest_4d_d_big_array_2.f90   |   204 +
 Test/old_cmor_tables/mytest_4d_d_big_array_3.f90   |   204 +
 Test/old_cmor_tables/mytest_4d_d_big_array_4.f90   |   203 +
 Test/old_cmor_tables/mytest_4d_d_big_array_5.f90   |   201 +
 Test/old_cmor_tables/mytest_4d_r.f90               |   185 +
 Test/old_cmor_tables/mytest_4d_r_big_array.f90     |   202 +
 Test/old_cmor_tables/rewrite_harvardf_data.f90     |   113 +
 Test/old_cmor_tables/test1.f90                     |   473 +
 Test/old_cmor_tables/test2.f90                     |   477 +
 Test/old_cmor_tables/test3.f90                     |   481 +
 Test/old_cmor_tables/test4.f90                     |   475 +
 Test/old_cmor_tables/test_3h.f90                   |   580 +
 Test/old_cmor_tables/test_any_from_asc.f90         |   348 +
 Test/old_cmor_tables/test_any_from_asc_d.f90       |   348 +
 Test/old_cmor_tables/test_any_from_asc_i.f90       |   348 +
 Test/old_cmor_tables/test_cmor_grid_alejandro.f90  |   166 +
 Test/old_cmor_tables/test_dimensionless.f90        |   549 +
 Test/old_cmor_tables/test_fortran_example_00.f90   |   481 +
 Test/old_cmor_tables/test_fortran_example_01.f90   |   334 +
 Test/old_cmor_tables/test_fortran_example_02.f90   |   376 +
 Test/old_cmor_tables/test_lots_of_variables.f90    |   343 +
 Test/old_cmor_tables/test_region.f90               |   335 +
 .../test_shrt_exp_nm_set_att_initi.f90             |   343 +
 Test/old_cmor_tables/test_sigma.f90                |   551 +
 Test/old_cmor_tables/test_singleton.f90            |   594 +
 Test/old_cmor_tables/test_sophie.f90               |   483 +
 Test/old_cmor_tables/test_station_data.f90         |   380 +
 Test/old_cmor_tables/wegner_test.f90               |   447 +
 Test/out_files.py                                  |   493 +
 Test/python_test_table_A                           |  2388 +++
 Test/rewrite_harvardf_data.f90                     |   125 +
 Test/speed_test_table_A                            |  2131 +++
 Test/ta_3D_r_2.asc                                 |    22 +
 Test/ta_4D_r.asc                                   |    23 +
 Test/tas.asc                                       |    17 +
 Test/tas_3D_noreorder.input                        |     1 +
 Test/tas_3D_xty_-180_180.asc                       |    19 +
 Test/tas_3d_r.asc                                  |    17 +
 Test/tas_harvardf.txt                              |  4385 +++++
 Test/tas_mytest_3d_i.asc                           |    19 +
 Test/tas_mytest_3d_i.input                         |     1 +
 Test/tas_mytest_noreorder.asc                      |    19 +
 Test/tas_mytest_reorder.asc                        |    19 +
 Test/tas_mytest_reorder_split_lon.asc              |    19 +
 Test/test1.f90                                     |   511 +
 Test/test2.f90                                     |   513 +
 Test/test3.f90                                     |   517 +
 Test/test4.f90                                     |   514 +
 Test/test_3h.f90                                   |   585 +
 Test/test_any_from_asc.f90                         |   352 +
 Test/test_any_from_asc_d.f90                       |   352 +
 Test/test_any_from_asc_i.f90                       |   350 +
 Test/test_checker_works.py                         |  1767 ++
 Test/test_cmor_grid_alejandro.f90                  |   167 +
 Test/test_compression.py                           |    63 +
 Test/test_dimensionless.f90                        |   588 +
 Test/test_fortran_example_00.f90                   |   517 +
 Test/test_fortran_example_01.f90                   |   335 +
 Test/test_fortran_example_02.f90                   |   376 +
 Test/test_grid.c                                   |   242 +
 Test/test_lots_of_variables.c                      |   350 +
 Test/test_lots_of_variables.f90                    |   344 +
 Test/test_python_1D_var.py                         |    36 +
 Test/test_python_2Gb_file.py                       |    48 +
 Test/test_python_2Gb_slice.py                      |    51 +
 Test/test_python_YYYMMDDHH_exp_fmt.py              |    38 +
 Test/test_python_appending.py                      |    92 +
 Test/test_python_bounds_request.py                 |    59 +
 Test/test_python_common.py                         |   164 +
 Test/test_python_direct_calls.py                   |   120 +
 Test/test_python_index_coord.py                    |    44 +
 Test/test_python_jamie.py                          |    39 +
 Test/test_python_jamie_2.py                        |    43 +
 Test/test_python_jamie_3.py                        |    46 +
 Test/test_python_jamie_4.py                        |    48 +
 Test/test_python_jamie_6.py                        |   169 +
 Test/test_python_jamie_7.py                        |    87 +
 Test/test_python_joerg_1.py                        |   106 +
 Test/test_python_joerg_2.py                        |    83 +
 Test/test_python_joerg_3.py                        |   149 +
 Test/test_python_max_variables.py                  |    90 +
 Test/test_python_max_variables_2.py                |    96 +
 Test/test_python_memory_check.py                   |   131 +
 Test/test_python_new_tables.py                     |    41 +
 Test/test_python_open_close_cmor_multiple.py       |    59 +
 Test/test_python_region.py                         |    33 +
 Test/test_python_reverted_lats.py                  |    61 +
 Test/test_python_user_interface_00.py              |   131 +
 Test/test_python_user_interface_01.py              |    95 +
 Test/test_python_user_interface_03.py              |   104 +
 Test/test_region.f90                               |   336 +
 Test/test_shrt_exp_nm_set_att_initi.f90            |   346 +
 Test/test_sigma.f90                                |   583 +
 Test/test_singleton.f90                            |   631 +
 Test/test_sophie.f90                               |   509 +
 Test/test_station_data.f90                         |   402 +
 Test/wegner_test.f90                               |   447 +
 compile_line.txt.in                                |     5 +
 config.guess                                       |  1463 ++
 config.sub                                         |  1579 ++
 configure                                          |  5763 +++++++
 configure.ac                                       |   371 +
 data/tas_sample.nc                                 |   Bin 0 -> 403952 bytes
 get_svn_version.sh                                 |     7 +
 include/cmor.h                                     |   286 +
 include/cmor_func_def.h                            |   102 +
 include/cmor_md5.h                                 |    30 +
 install-sh                                         |   323 +
 setup.py.in                                        |    67 +
 show_svn.c                                         |    18 +
 237 files changed, 166096 insertions(+)

diff --git a/Doc/IPCC_output_requirements.htm b/Doc/IPCC_output_requirements.htm
new file mode 100644
index 0000000..68a36b2
--- /dev/null
+++ b/Doc/IPCC_output_requirements.htm
@@ -0,0 +1,3381 @@
+<html>
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=Generator content="Microsoft FrontPage 5.0">
+<title>IPCC Model Output Requirements</title>
+
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:Wingdings;
+	panose-1:5 0 0 0 0 0 0 0 0 0;}
+ at font-face
+	{font-family:StarSymbol;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin:0in;
+	margin-bottom:.0001pt;
+	font-size:12.0pt;
+	font-family:"Times New Roman";}
+p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
+	{margin:0in;
+	margin-bottom:.0001pt;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+span.MsoFootnoteReference
+	{vertical-align:super;}
+span.MsoEndnoteReference
+	{vertical-align:super;}
+a:link, span.MsoHyperlink
+	{color:blue;
+	text-decoration:underline;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:purple;
+	text-decoration:underline;}
+p
+	{margin-right:0in;
+	margin-left:0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";}
+span.FootnoteCharacters
+	{vertical-align:super;}
+span.WW8Num3z0
+	{font-family:Symbol;}
+span.WW8Num3z1
+	{font-family:"Courier New";}
+span.WW8Num3z2
+	{font-family:Wingdings;}
+span.WW8Num4z0
+	{font-family:Symbol;}
+span.WW8Num4z1
+	{font-family:"Courier New";}
+span.WW8Num4z2
+	{font-family:Wingdings;}
+span.WW8Num6z0
+	{font-family:Symbol;}
+span.WW8Num6z1
+	{font-family:"Courier New";}
+span.WW8Num6z2
+	{font-family:Wingdings;}
+span.WW8Num7z0
+	{font-family:Symbol;}
+span.WW8Num7z1
+	{font-family:"Courier New";}
+span.WW8Num7z2
+	{font-family:Wingdings;}
+span.WW8Num9z0
+	{font-family:Symbol;}
+span.WW8Num9z1
+	{font-family:"Courier New";}
+span.WW8Num9z2
+	{font-family:Wingdings;}
+span.WW8Num10z0
+	{font-family:Symbol;}
+span.WW8Num10z1
+	{font-family:"Courier New";}
+span.WW8Num10z2
+	{font-family:Wingdings;}
+span.WW8Num12z0
+	{font-family:Symbol;}
+span.WW8Num12z1
+	{font-family:"Courier New";}
+span.WW8Num12z2
+	{font-family:Wingdings;}
+span.WW8Num13z0
+	{font-family:Symbol;}
+span.WW8Num13z1
+	{font-family:"Courier New";}
+span.WW8Num13z2
+	{font-family:Wingdings;}
+span.WW8Num14z0
+	{font-family:Symbol;}
+span.WW8Num14z1
+	{font-family:"Courier New";}
+span.WW8Num14z2
+	{font-family:Wingdings;}
+span.WW8Num15z0
+	{font-family:Symbol;}
+span.WW8Num15z1
+	{font-family:"Courier New";}
+span.WW8Num15z2
+	{font-family:Wingdings;}
+span.WW8Num16z0
+	{font-family:Symbol;}
+span.WW8Num16z1
+	{font-family:"Courier New";}
+span.WW8Num16z2
+	{font-family:Wingdings;}
+span.WW8Num17z0
+	{font-family:Symbol;}
+span.WW8Num17z1
+	{font-family:"Courier New";}
+span.WW8Num17z2
+	{font-family:Wingdings;}
+span.WW8Num18z0
+	{font-family:Symbol;}
+span.WW8Num18z1
+	{font-family:"Courier New";}
+span.WW8Num18z2
+	{font-family:Wingdings;}
+span.WW8Num19z0
+	{font-family:Symbol;}
+span.WW8Num19z1
+	{font-family:"Courier New";}
+span.WW8Num19z2
+	{font-family:Wingdings;}
+span.WW8Num23z0
+	{font-family:Symbol;}
+span.WW8Num23z1
+	{font-family:"Courier New";}
+span.WW8Num23z2
+	{font-family:Wingdings;}
+span.BulletSymbols
+	{font-family:StarSymbol;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.2in 1.0in 1.25in;}
+div.Section1
+	{page:Section1;}
+ /* List Definitions */
+ ol
+	{margin-bottom:0in;}
+ul
+	{margin-bottom:0in;}
+-->
+</style>
+
+</head>
+
+<body lang=EN-US link=blue vlink=purple>
+
+<div class=Section1>
+
+<p class=MsoNormal align=center style='text-align:center'><b><span
+style='font-size:16.0pt'>Requirements for</span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><span
+style='font-size:16.0pt'>IPCC Standard Output Contributed to the PCMDI Archive</span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><span
+style='font-size:16.0pt'> </span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span style='font-size:14.0pt'>15 September 2005</span></p>
+
+<p class=MsoNormal><b><span style='font-size:14.0pt'> </span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>(Send questions/comments/suggestions to <span
+class=MsoHyperlink><span style='color:blue'><a href="mailto:taylor13 at llnl.gov">taylor13 at llnl.gov</a></span></span>)</span></p>
+
+<p class=MsoNormal><span style='font-size:16.0pt;color:red'> </span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:16.0pt;color:red'>Click <i><a
+href="http://www-pcmdi.llnl.gov/ipcc/IPCC_output_requirements.pdf">here</a></i>
+to obtain a pdf version of this document.</span></p>
+
+<p class=MsoNormal><span style='font-size:16.0pt;color:red'> </span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:16.0pt'>Recent changes to this document are summarized in the
+last section <a href="#updates">below</a>.</span></p>
+
+<p class=MsoNormal><span style='font-size:16.0pt'> </span></p>
+
+<p class=MsoNormal><b><span style='font-size:14.0pt'>������������������������������������ ���������������������������������� </span></b></p>
+
+<p class=MsoNormal><b><span style='font-size:14.0pt'>Overview</span></b></p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify'>Much of the output from coupled
+ocean-atmosphere GCM simulations performed as part of the IPCC process will be
+archived at PCMDI and then distributed for analysis to IPCC WG1 under policies
+developed by IPCC and the WGCM.� The user community will expect to be able to
+extract the data both efficiently and in a uniform way across all models.� This
+imposes rather restrictive constraints on how the data should be organized.�
+With currently available resources, the effort to write the data in a uniform
+structure and format falls on the modeling centers contributing the data.� In
+this document we provide the specifications for writing this model output.� There
+is considerable community support for imposing these same requirements on
+output contributed as part of various model intercomparison projects (e.g.,
+CMIP, AMIP, CFMIP, APE, PMIP, etc.), so the effort required to prepare data for
+IPCC will likely have longer term payoffs as model output is prepared for these
+other projects. </p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify'>A FORTRAN 90 code,
+<a href="http://www-pcmdi.llnl.gov/software-portal/cmor">CMOR</a><a
+href="#_ftn1" name="_ftnref1" title=""><span class=MsoFootnoteReference><span style='font-size:12.0pt;font-family:"Times New Roman"'>[1]</span></span></a>
+(pronounced "see more") has been written to output data that conforms
+to these requirements. <a
+href="http://www-pcmdi.llnl.gov/software/cmor/cmor_users_guide.pdf">Documentation</a><a
+href="#_ftn2" name="_ftnref2" title=""><span class=MsoFootnoteReference><span
+class=MsoFootnoteReference><span style='font-size:12.0pt;font-family:"Times New Roman"'>[2]</span></span></span></a>
+for this code explains how it can substantially reduce the burden placed on the
+modeling centers preparing IPCC model output.  For those groups choosing
+not to use this output code, the following requirements should be strictly
+adhered to.</p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify'>The data archived at PCMDI will
+be made available to the community via the <a href="http://esg.llnl.gov/portal">ESG
+</a><a href="#_ftn3" name="_ftnref3" title=""><span class=MsoFootnoteReference><span
+class=MsoFootnoteReference><span style='font-size:12.0pt;font-family:"Times New Roman"'>[3]</span></span></span></a>(Earth
+System Grid), which will include a variety of methods for accessing the data
+(e.g., GridFTP).� Password protection will be used to limit access to those
+granted permission according to IPCC and WGCM policies.</p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify'>The requirements for data
+contributed to the archive are listed in four sections below, the first specifying
+the general structure and format of the data, the second the constraints
+imposed on the variables, the third the metadata required for describing the
+coordinates, and the last setting down the required and recommended
+"global attributes".� </p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><b><span
+style='font-size:14.0pt'>Data format, data structure, and file composition
+requirements:</span></b></p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'> </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Data must be
+written through the <a
+href="http://my.unidata.ucar.edu/content/software/netcdf/">netCDF</a><a
+href="#_ftn4" name="_ftnref4" title=""><span class=FootnoteCharacters><span
+class=FootnoteCharacters><span style='font-size:12.0pt;font-family:"Times New Roman"'>[4]</span></span></span></a>
+API (application program interface) and conform to the <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">CF metadata standards</a><a
+href="#_ftn5" name="_ftnref5" title=""><span class=FootnoteCharacters><span
+class=FootnoteCharacters><span style='font-size:12.0pt;font-family:"Times New Roman"'>[5]</span></span></span></a>.
+</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Each file must
+contain only a single output field from a single simulation (i.e., a single
+run).� Each file will also include coordinate variables, attributes and other
+metadata as specified below.� If the field is a function of time, more than one
+time sample (but not necessarily all time samples) may be included in a single
+file.� File size should never exceed 2 gigabytes; we recommend that for long
+time-series typical of many coupled model simulations, the data should not be
+parsed to finely: a few large files is preferred to many small files (within
+the 2 gigabyte limit).� (Monthly data, for example, might be divided into multi-decade
+chunks.)</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>For data that are
+a function of longitude and latitude, only grids representable as a Cartesian
+product of longitude and latitude axes are allowed.� Model output on other
+grids, such as "thin" grids, grids with rotated poles, and irregular
+grids, must be mapped to a longitude-latitude Cartesian grid before being
+stored.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Most atmospheric
+fields that are functions of the vertical coordinate must be interpolated to
+standard pressure levels (as specified in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn6" name="_ftnref6" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[6]</span></sup></sup></a> list of variables),
+but one field (the 3-d cloud fraction) will reside on the original model
+levels.� There are different metadata and attribute requirements specified
+below for these two types of "3-d" fields.� </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Oceanic fields
+that are a function of the vertical coordinate must be reported on depth levels
+and it is recommended, but not required, that they be interpolated �to standard
+depth levels (as specified in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn7" name="_ftnref7" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[7]</span></sup></sup></a>).</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The IPCC database
+will comprise output from many different models, at least 11 experiments,
+perhaps several ensemble members, which have been sampled (or averaged) at 5
+different frequencies (time-independent, annually, monthly, daily, and 3-hourly).
+��A separate directory should be created containing all the variables in each
+model/experiment/standard_output_table/ensemble_member category (e.g., CSIRO/20C3M/A1/run1).�
+This will ensure that filenames (discussed next) within each directory are
+unique.� For uniformity, it is suggested that the trailing lower case letter on
+tables should be dropped (e.g., 'A1', not A1a) and it is suggested that the
+experiments be abbreviated as follows:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>PIcntrl (i.e.,
+the pre-industrial control experiment)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>PDcntrl (i.e.,
+the present-day control experiment)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><a name="OLE_LINK1"><span style='font-family:"Courier New"'>→ </span>20C3M
+(i.e., the climate of the 20th Century experiment (20C3M))</a></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>Commit (i.e.,
+the committed climate change experiment)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>SRESA2 (i.e.,
+the SRES A2 experiment)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>SRESA1B (i.e.,
+the 720 ppm stabilization experiment (SRES A1B))</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>SRESB1 (i.e.,
+the 550 ppm stabilization experiment (SRES B1))</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>1%_to2x (i.e.,
+the 1%/year CO2 increase experiment (to doubling))</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>1%_to4x (i.e.,
+the 1%/year CO2 increase experiment (to quadrupling))</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>Slabcntl (i.e.,
+the slab ocean control experiment)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>2xCO2 (i.e., the
+2xCO2 equilibrium experiment)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>AMIP (i.e., the
+AMIP experiment)</p>
+
+<p class=MsoNormal style='margin-left:.25in;text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The names of
+output netCDF files must begin with the 'output variable name' listed in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn8" name="_ftnref8" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[8]</span></sup></sup></a> list of variables,
+followed by an underscore and then the table number (e.g., tas_O1, psl_A1, tas_A4,
+etc.; note that the lower case letter suffix on the tables may be omitted:
+psl_A1a may be written psl_A1).� Following this prefix, the user is free to
+complete the name in any reasonable way. �Recall that the time samples from a
+single variable may be separated into contiguous groups and stored in separate
+files.� The user must make sure that the names of the series of files are
+unique.� If, for example, each file contains 50 years of data, the user might
+simply label the files by 50-year chunks (e.g., tas_O1_1.nc, tas_O1_2.nc, tas_O1_3.nc,
+etc.), but more explicit information could also be included in the file names
+(e.g., tas_O1_1900-1949.nc, tas_O1950-1999.nc, tas_O1_2000-2049.nc, etc.)</p>
+
+<p class=MsoNormal style='margin-left:.25in;text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><b><span
+style='font-size:14.0pt'>Requirements for output variables:</span></b></p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'> </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>All output fields
+must be written as single precision floating point numbers (netCDF type
+"float").</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The variable
+names (in the netCDF file) must be the names ("output variable
+names") specified in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn9" name="_ftnref9" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[9]</span></sup></sup></a> table (e.g., surface
+air temperature data will be stored in a variable named "tas").</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The units
+required for the output fields are given in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn10" name="_ftnref10" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[10]</span></sup></sup></a> tables.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The positive
+direction of vertical fluxes must be consistent with that specified in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn11" name="_ftnref11" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[11]</span></sup></sup></a> table "CF
+standard name".� For example, the positive direction for vertical heat
+fluxes (e.g., "surface_upward_latent_heat_flux") and momentum fluxes
+(e.g., "surface_downward_eastward_stress") are implied by the
+standard name.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The order of
+array dimensions must be:� time, level, latitude, longitude.� For fields of
+lesser rank, one or more coordinate will be omitted, but the ordering must be
+preserved.� The above order assumes the C language convention (opposite the
+FORTRAN convention) in which the last coordinate varies most rapidly.� In the
+few cases where an additional dimension is required (e.g., the
+"region" dimension used to distinguish different ocean basins), that
+dimension should appear just after the "time" dimension.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>If longitude is a
+coordinate, data must be stored west to east (in degrees), starting with the
+first grid point greater than or equal to 0 degrees east.� All coordinate
+locations must be unique (e.g., don't include both 0 and 360 degrees east).</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>If latitude is a
+coordinate, data must be stored south to north (in degrees).</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>If there is a
+vertical coordinate, data must be stored starting with the grid point nearest
+the surface. </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>If there is a
+time dimension, data must be stored with time increasing.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>If there is a
+"region" coordinate, used to distinguish ocean basins, the data
+should be stored in the order: Atlantic, Indian, Pacific, global.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>All "missing
+data"<a href="#_ftn12" name="_ftnref12" title=""><sup><sup><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[12]</span></sup></sup></a>
+must be assigned the single precision floating point value of 1.e20</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>For ocean heat
+flux and stream function data, an extra dimension must be included to identify
+the basin � Atlantic, Indian, Pacific, or global oceans. (See <a
+href="#example_4">example 4</a> �below.)</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Required
+attributes:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>standard_name =
+a character string containing a CF standard name that can be found in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn13" name="_ftnref13" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[13]</span></sup></sup></a> tables.� Although
+usually required, for a few fields the standard_name is omitted from the table,
+and for these variables the standard_name should be omitted as an attribute. </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>units = a
+character string containing the units given in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn14" name="_ftnref14" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[14]</span></sup></sup></a> tables, which must
+be in a form recognizable by <a
+href="http://my.unidata.ucar.edu/content/software/udunits/">UNIDATA's Udunits
+package</a><a href="#_ftn15" name="_ftnref15" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[15]</span></span></span></a>
+(e.g., "W m-2".) </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>If the variable
+has any "missing values", then define _FillValue = 1.e20, and assign
+that value to data that are "missing".</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>When an output
+field has a coordinate that is single-valued (e.g., surface wind may have a
+vertical coordinate value of 10 meters), a "coordinates" attribute must
+be defined and the scalar value must be stored in the file.� The following
+variables require singleton dimension information: tas, tasmin, tasmax, mrsos,
+mrros, uas, vas, and huss. �For each of these variables, an <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn16" name="_ftnref16" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[16]</span></sup></sup></a> table indicates what
+the value of the singleton dimension should be. �As illustrated by<a
+href="#example_3"> example 3</a> below, the "bounds" attribute is
+required on the singleton dimension associated with mrsos and mrros.� See <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#scalar_coords">section
+5.7 of the CF-conventions</a><a href="#_ftn17" name="_ftnref17" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[17]</span></span></span></a>
+for more information.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>If the variable
+contains a time-mean, then the �cell_methods� attribute must be defined with
+the value �time: mean� or if you want to indicate that the interval between
+samples contributing to the mean is 3 hours, then cell_methods='time: mean
+(interval: 3 hours)'.� If the variable is accumulated across an ocean basin
+then the cell_methods attribute must include the string �longitude: sum�.� If
+the variable is both a time-mean and zonally accumulated, then cell_methods =
+'time: mean� longitude: sum').</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>When a field is
+stored by ocean basin (e.g., northward ocean heat transport in the Atlantic,
+Indian, and Pacific basins, as well as the global transport), a
+"coordinates" attribute must be defined with the value
+"geo_region". See<a href="#example_4"> example 4</a> below and <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region">section
+6.1.1 of the CF-conventions</a><a href="#_ftn18" name="_ftnref18" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[18]</span></span></span></a>
+for more information.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Recommended attributes:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>If the variable
+has any "missing values", then define missing_value = 1.e20� Note
+that although this attribute seems to be redundant with _FillValue, some
+software that reads netCDF files expects the missing_value attribute, while
+other software expects the _FillValue attribute, so including both is
+recommended.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>original_name =
+the name of the variable as it is commonly known at the user's modeling
+institute.� If the variable being written was computed in some simple way from
+two or more original fields (e.g., subtracting the upwelling and downwelling
+fluxes to get a net flux, or multiplying by a scalar or changing the sign),
+then it is recommended that this be indicated in the "original_name"
+(e.g., "irup � irdown", where "irup" and "irdown"
+are the names of the original fields that were subtracted).� If more
+complicated processing is required, attribute would likely be omitted and the information
+would more naturally be included in a "history" attribute for this
+variable, described next.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>history = how
+the variable was processed before outputting (e.g., give name(s) of the file(s)
+from which the data were read and indicate what calculations were performed,
+such as interpolating to standard pressure levels or changing the unit).� This
+information should allow someone at the user's institute to reproduce the
+procedure that created the output.� Note that this history attribute is
+variable-specific, whereas the global history attribute defined below (see
+"Recommended attributes" under "Requirements for global
+attributes") provides information concerning the model simulation itself
+or refers to processing procedures common to all variables.� </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>original_units =
+a character string indicating the original units of the data before it has been
+processed to be consistent with the units appearing in the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn19" name="_ftnref19" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[19]</span></sup></sup></a> tables. </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>long_name = a
+character string that might serve as a title for the variable on plots (e.g.,
+"Surface Air Temperature").</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>comment = a
+character string providing further information concerning the variable (e.g.,
+if the variable is mrso � soil_moisture_content �, the comment might read
+"includes subsurface frozen water but not surface snow and ice").</p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><b><span
+style='font-size:14.0pt'>Requirements for coordinate variables:</span></b></p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><b><span
+style='font-size:14.0pt'> </span></b></p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>All coordinate
+variables must be written as double precision floating point numbers (netCDF
+type "double").</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>A longitude
+coordinate must be named either "longitude" or, �preferably, "lon",
+its CF standard name is "longitude", and its units must be
+"degrees_east".� The values should be store west to east starting
+with the first longitude greater than or equal to 0 degrees.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>A latitude
+coordinate must be named either "latitude" or, preferably,
+"lat", its CF standard name is "latitude", and its units
+must be "degrees_north".� The values should be stored south to north.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>A time coordinate
+must be named "time", its CF standard name is "time", and
+its units must be "days since [basetime]", where [basetime] can be
+specified by the user, typically in the form year-month-day� (e.g., "days
+since 1800-1-1").� The same 'base time' should apply to all time samples
+in a single simulation (i.e., when creating a series of files containing model
+output for a single run, don't change the units or basetime from one file to
+the next; in the above example 1800-1-1 is the 'base time').� For time-mean
+data, it is recommended that the coordinate value be defined as the mid-point
+of the interval over which the average is computed.� (More generally, this same
+recommendation applies whenever time-bounds are included: the time coordinate
+value should be the mean of the two time bounds.)</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>An atmospheric
+pressure coordinate must be named "plev", its CF standard name is
+"air_pressure" and its units must be "Pa" (Pascal).� The values
+should be stored in order of decreasing pressure.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>An atmospheric
+height coordinate must be named "height", its CF standard name is
+"height" and its units must be "m" (meters).� The values
+should be stored in order of increasing height. </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>An atmospheric or
+ocean dimensionless vertical coordinate (indicating model level) must be named
+"lev" and its CF standard name can be found in <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app">Appendix
+D</a><a href="#_ftn20" name="_ftnref20" title=""><sup><sup><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[20]</span></sup></sup></a>
+of the CF-conventions.� The values should be stored starting with the
+coordinate nearest the earth's surface.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>An ocean depth
+coordinate must be named "depth", its CF standard name is
+"depth", its units must be "m" (meters), and it must
+increase with increasing depth (i.e., positive-down). �The values should be
+stored in order of increasing depth (surface down). </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>With some
+exceptions (indicated immediately below), the bounds on coordinate variables
+must be included in the file.� For longitude and latitude, the bounds must
+always be included.� For time, the bounds must be included if the data
+represent a time-mean (e.g., monthly mean).� For model-level data, the cell
+bounds should be included, indicating the interfaces between model levels (see <a
+href="#example_5">example 5</a> below).� For data that has been interpolated to
+pressure surfaces, there should be no �bounds� attribute attached to the
+pressure coordinate (see <a href="#example_2">example 2</a> below). The same is
+true for ocean depth coordinate data that has been interpolated from model
+levels. For data that represent a �snap-shot� in time (e.g., the values at a
+single model time-step), the time coordinate should have no �bounds�
+attribute.� A "region" dimension will not require bounds (see <a
+href="#example_5">example 5</a> below).� Note that CF requires cell bounds for
+1-dimensional coordinates be stored in 2-dimensional arrays as described in <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#bnds">section
+7.1 of the CF-conventions</a><a href="#_ftn21" name="_ftnref21" title=""><sup><sup><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[21]</span></sup></sup></a>
+and as shown in the examples below.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>For dimensionless
+vertical coordinates, the user must include in the file all the information
+needed to positively and uniquely indicate the location of the data.� In this
+case the "formula_terms" attribute must be defined and additional
+variables or parameters will need to be stored in the file (e.g., surface
+pressure and pressure at the top of the model for an atmospheric-sigma
+coordinate system).� See� <a href="#example_5">example 5</a> below, and <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vdim">section
+4.3.2 of the CF-conventions</a><a href="#_ftn22" name="_ftnref22" title=""><sup><sup><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[22]</span></sup></sup></a>
+and <a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app">Appendix
+D</a><a href="#_ftn23" name="_ftnref23" title=""><sup><sup><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[23]</span></sup></sup></a>
+of the CF-conventions.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Variables that
+are stored by basin must include a dimension corresponding with the geographic
+region.� The "region" dimension is a simple index (no coordinate
+values) with the name "region".� A character variable (netCDF type
+"char") by the name of "geo_region" must also be defined
+with dimensions (region, strlen), where region is again the simple index and�
+strlen is the maximum string length.� A "standard_name" attribute
+with the value "region" must be attached to "geo_region".�
+The values of the labels stored in geo_region which identify the basins, are
+taken from the list of <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/region.html">valid region names</a><a
+href="#_ftn24" name="_ftnref24" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[24]</span></sup></sup></a> (e.g.,
+"atlantic_ocean", "indian_ocean",
+"pacific_ocean", and "global_ocean").� See <a
+href="#example_4">example 4</a> below and <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region">section
+6.1.1 of the CF-conventions</a><a href="#_ftn25" name="_ftnref25" title=""><sup><sup><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[25]</span></sup></sup></a>
+for more information.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Required
+attributes:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>standard_name =
+a character string containing the standard name (see coordinate standard names
+given above).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>units = a
+character string containing the units (see allowable coordinate units given
+above).�� Note that in the case of a dimensionless vertical coordinate, this
+attribute may be omitted.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>axis =
+"X", "Y", "Z", or "T" as appropriate
+(see <a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#ctype">section
+4 of the CF-conventions</a><a href="#_ftn26" name="_ftnref26" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[26]</span></span></span></a>).�
+In the few cases where an additional dimension is required (e.g., the
+"region" dimension used to distinguish different ocean basins), this
+attribute should be omitted (for this additional dimension).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>bounds = a
+character string containing the name of the variable where the cell bounds are
+stored.� </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>For time
+coordinates, the �calendar� attribute must be included as described in <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#cal">section
+4.4.1 of the CF-conventions</a><a href="#_ftn27" name="_ftnref27" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[27]</span></span></span></a>.�
+Note that if a model has a gregorian calendar and the base time is defined to
+be prior to 1582, then the user should specify 'proleptic_gregorian', rather
+than 'gregorian' for the calendar attribute.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>For
+dimensionless vertical coordinates the �positive� attribute must be included
+and should be set to either �down� or �up�, as appropriate.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>For
+dimensionless vertical coordinates, the �formula_terms� attribute must be
+defined as described in <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vnum">section
+4.3.2 of the CF-conventions</a><a href="#_ftn28" name="_ftnref28" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[28]</span></span></span></a>
+and as illustrated in <a href="#example_5">example 5</a> below. Further
+information can be found in <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app">Appendix
+D</a><a href="#_ftn29" name="_ftnref29" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:12.0pt;font-family:"Times New Roman"'>[29]</span></span></span></a>
+of the CF-conventions.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Recommended
+attributes:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>For dimensionless
+vertical coordinates the �positive� attribute is required, and for all other
+vertical coordinates it is recommended that it be defined.</p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><b><span
+style='font-size:14.0pt'>Requirements for global attributes:</span></b></p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><b><span
+style='font-size:14.0pt'> </span></b></p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Required
+attributes:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>institution = a
+character string containing an abbreviated name or acronym of the institution
+that performed the model simulation, followed in parentheses by the fully
+spelled-out name and location (e.g., 'GFDL (Geophysical Fluid Dynamics
+Laboratory, Princeton, NJ, USA)')</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>source = a
+character string identifying the model version as it should be identified by
+the IPCC (although the IPCC may in many cases choose to identify models only by
+the institution's acronym).� Additionally, this attribute must include the year
+(i.e., model vintage) when this model version was first used in a scientific
+application.� Finally it should include information concerning the component
+models.� The following template should be used in constructing this string: '<i>[coupled_model_name]
+</i>(<i>[year]</i>):<i> </i>atmosphere: <i>[model_name] </i>(<i>[technical_name],
+[resolution_and_levels]</i>); ocean: <i>[model_name] </i>(<i>[technical_name], [resolution_and_levels]</i>);
+sea ice: <i>[model_name] </i>(<i>[technical_name])</i>; land: <i>[model_name] </i>(<i>[technical_name])'</i>'�
+As an example, "source" might contain the string: 'CCSM2 (2002):
+atmosphere: CAM2 (cam2_0_brnchT_itea_2, T42L26); ocean: �POP (pop2_0_ver_1.4.3,
+2x3L15); sea ice: CSIM4; land: CLM2.0'.� Additional explanatory information may
+follow the required information.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>project_id = "IPCC
+Fourth Assessment"</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>table_id =
+should be assigned a character string identifying the <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">IPCC Standard Output</a><a
+href="#_ftn30" name="_ftnref30" title=""><sup><sup><span style='font-size:12.0pt;
+font-family:"Times New Roman"'>[30]</span></sup></sup></a> table where this variable
+appears (e.g., Table A1).� The trailing lower case letter may be omitted (e.g.,
+'Table A1a' may be written 'Table A1').</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>realization = an
+integer identifying the ensemble member from which the data were obtained
+(e.g., 1, 2, 3, etc.; this attribute should be set to 1 if only a single
+simulation was performed).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>experiment_id =
+the appropriate character string, identifying the experiment, �taken from the
+following list:</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'pre-industrial
+control experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'present-day
+control experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'climate of
+the 20th Century experiment (20C3M)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'committed
+climate change experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'SRES A2
+experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'720 ppm
+stabilization experiment (SRES A1B)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'550 ppm
+stabilization experiment (SRES B1)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'1%/year CO2
+increase experiment (to doubling)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'1%/year CO2
+increase experiment (to quadrupling)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'slab ocean
+control experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'2xCO2
+equilibrium experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'AMIP
+experiment' </p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Recommended
+attributes:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>Conventions =
+'CF-1.0'</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>contact = name
+and contact information (e.g., email, address, phone number) of person who
+should be contacted for more information about the data.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>history = A
+character string containing an audit trail for modifications to the original
+data.� Each modification is typically preceded by a "timestamp".��
+The "history" attribute provided here will be a global one that
+should not depend on which variable is contained in the file.� A
+variable-specific "history" can also be included as an attribute
+attached to the output variable.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>comment = A
+character string containing additional information about the data or methods
+used to produce it.� The user may include, for example, a description of how
+the initial conditions for a simulation were specified and how the model was
+spun-up (including the length of the spin-up period).� If the run was initiated
+from a "control" run, it would be appropriate to indicate which
+control run was used and what time in that run provided the initial conditions
+(e.g. "This simulation was initiated from the end of control run
+eulT42cntrl").� Also please specify which forcing agents are included in
+the historical runs (e.g., greenhouse gases, sulfate aerosol direct effects,
+volcanoes, solar forcing, etc.)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>references = A
+character string containing a list of published or web-based references that
+describe the data or the methods used to produce it.� Typically, the user
+should provide references describing the model formulation here.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.25in'><span style='font-family:"Courier New"'>→ </span>title = "<i>[institute_name]</i>
+model output prepared for IPCC Fourth Assessment Report <i>[experiment_id]</i>"
+where <i>[institute_name]</i> should be replaced by the contributing
+institution's acronym or name (e.g., "GFDL", "CCCma",
+"Hadley Centre",� etc.) and <i>[experiment_id]</i> should be replaced
+by one of the following strings:</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'pre-industrial
+control experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'present-day
+control experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'climate of
+the 20th Century experiment (20C3M)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'committed
+climate change experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'SRES A2
+experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'720 ppm
+stabilization experiment (SRES A1B)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'550 ppm
+stabilization experiment (SRES B1)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'1%/year CO2
+increase experiment (to doubling)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'1%/year CO2
+increase experiment (to quadrupling)' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'slab ocean
+control experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'2xCO2
+equilibrium experiment' </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify'>'AMIP
+experiment' </p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'>A sample title
+is: 'GFDL model output prepared for IPCC Fourth Assessment 1%/year CO2 increase
+experiment'</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'> </p>
+
+<p class=MsoNormal style='page-break-after:avoid'><a name=updates><b><span
+style='font-size:14.0pt'>Recent Changes to this Document:</span></b></a></p>
+
+<p class=MsoNormal style='page-break-after:avoid'><b><span style='font-size:
+14.0pt'> </span></b></p>
+
+<p><b>15 September 2005</b><b>:</b></p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Edited in minor
+ways for increased clarity.</p>
+
+<p><b>25 January 2005</b><b>:</b></p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Corrected
+specified order of "region" coordinate to be: Atlantic, Indian,
+Pacific, global (was Atlantic, Pacific, Indian, global).</p>
+
+<p class=MsoNormal style='margin-left:.25in;text-align:justify'> </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>17�
+November 2004:</b></p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Recommended that
+long time-series not be subdivided into too many files; within the 2 gigabyte
+limit, store relatively few large files.</p>
+
+<p class=MsoNormal style='margin-left:.25in;text-align:justify'><b>�</b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>15 September 2004</b><b>: </b></p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Noted that ocean
+data data may be reported on depth levels that are not standard.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>The recommended
+directory structure for storing output fields was altered.� </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Noted that unique
+longitudes should be stored (i.e., don't duplicate, for example, a grid cell
+located at 0 degree with one stored at 360 degree longitude).� </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Noted that the
+'base time' in the time units attribute should be the same for all files for a
+single model run.� </p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Noted that when a
+model uses a gregorian calendar and the "base time" preceeds
+year1582, then 'proleptic_gregorian', rather than 'gregorian' should be
+specified as the calendar attribute.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Provided further
+explanation of the table_id global attribute.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Removed option of
+not specifying the "realization" global attribute.� (It should be set
+to the integer 1, if only a single realization was performed).</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Noted that
+cell_bounds attribute should be omitted if ocean data has been interpolated to
+standard depth levels.</p>
+
+<p class=MsoNormal style='margin-left:.55in;text-align:justify;text-indent:
+-.3in'><span style='font-family:"Courier New"'>▪ </span>Several web page
+links were corrected.</p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'> </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>4 September 2004</b><b>: </b>Web addresses changed to be consistent with the new PCMDI
+web site.</p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b> </b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>29 July 2004</b><b>: </b>A recommendation was added to specify in the global
+"comment" attribute which forcing agents are included in the 20C3M
+simulations. </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'> </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>20 July 2004</b><b>: </b>A recommendation was added that when time-bounds are included
+in the file, the time-coordinate values should always be the mean of the two
+associated time-bounds.� For example, it is recommended that the time
+coordinate value of a time-mean should be defined as the mid-point of the
+averaging interval.</p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'> </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>19 July 2004</b><b>: </b>�One more official experiment name was changed to be more
+consistent with the others: 'climate of the 20th Century experiment (20C3M)'
+was previously referred to as 'climate of the 20th Century (20C3M)' </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b> </b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>15 July 2004</b><b>: </b>�Three of the official experiment names were changed; these
+were the names of the control experiments, which now read: 1) 'pre-industrial
+control experiment', 'present-day control experiment', and 'slab ocean control
+experiment'.� Also, 'AMIP experiment' was added as an official IPCC experiment.</p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'> </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><b>6 June 2004</b><b>:</b>� Initial document version released.</p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='page-break-after:avoid'> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p class=MsoNormal align=center style='text-align:center'><a name="example_1"><span
+style='font-size:14.0pt'>Example 1</span></a><span style='font-size:14.0pt'>:
+Surface latent heat flux</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>(a function of longitude, latitude, month)</span></p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>netcdf hfls_A1 {</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>dimensions:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lon = 4 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lat = 3 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� time = UNLIMITED ; // (2 currently)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� bnds = 2 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>variables:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon(lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:standard_name =
+"longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:long_name = "longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:units = "degrees_east" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:axis = "X" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:bounds = "lon_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon_bnds(lon, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat(lat) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:standard_name = "latitude"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:long_name = "latitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:units = "degrees_north" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:axis = "Y" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:bounds = "lat_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat_bnds(lat, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time(time) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:standard_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:long_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:units = "days since
+2030-1-1" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:axis = "T" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:calendar = "360_day" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:bounds = "time_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time_bnds(time, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float hfls(time, lat, lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:standard_name =
+"surface_upward_latent_heat_flux" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:long_name = "Surface Latent
+Heat Flux" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:units = "W m-2" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:cell_methods = "time: mean
+(interval: 20 minutes)" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:_FillValue = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:missing_value = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfls:original_name = "LATENT"
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>hfls:history =
+" At�� 17:54:19 on 06/07/2004: CMOR altered the data in the following
+ways: replaced missing value flag (1.00000E+28) with standard missing value
+(1.00000E+20); multiplied by -1.00000E+00 to yield output units;" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>// global attributes:</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:title =
+"GICC� model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium
+experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:institution =
+"GICC (</span><span style='font-size:10.0pt;font-family:"Courier New"'>Generic</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>International</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Climate</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Center</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Geneva</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Switzerland</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:source =
+"GICCM1 (2002): atmosphere:� GICAM3 (gicam_0_brnchT_itea_2, T63L32);
+ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:contact =
+"Rusty Koder (koder at middle_earth.net)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:project_id =
+"IPCC Fourth Assessment" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� :table_id = "Table A1 (</span><span style='font-size:10.0pt;font-family:"Courier New"'>7 April 2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:experiment_id =
+"2xCO2 equilibrium experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:realization = 1
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:Conventions =
+"CF-1.0" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:history =
+"Output from archive/giccm_03_std_2xCO2_2256.� At </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, CMOR rewrote data to
+comply with CF standards and IPCC Fourth Assessment requirements" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:references =
+"Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).�
+Also see http://www.GICC.su/giccm/doc/index.html� 2XCO2 simulation described in
+Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:comment =
+"Equilibrium reached after 30-year spin-up after which data were output
+starting with nominal date of January 2030" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>data:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon = 0, 90, 180, 270 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -45, 45,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 45, 135,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 135, 225,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 225, 315 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat = 10, 20, 30 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 5, 15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 15, 25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 25, 35 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time = 15, 45 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 30,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 30, 60 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�hfls =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 19, 15, 11, 7,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 3, -1, -5, -9,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -13, -17, -21, -25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 18, 14, 10, 6,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 2, -2, -6, -10,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -14, -18, -22, -26 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>}</span></p>
+
+<span style='font-size:10.0pt;font-family:"Courier New"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><a name="example_2"><span
+style='font-size:14.0pt'>Example 2</span></a><span style='font-size:14.0pt'>: Air
+temperature</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>(a function of longitude, latitude, pressure, month)</span></p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-align:justify'> </p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>netcdf ta_A1 {</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>dimensions:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lon = 4 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lat = 3 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� plev = 5 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� time = UNLIMITED ; // (2 currently)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� bnds = 2 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>variables:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon(lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:standard_name = "longitude"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:long_name = "longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:units = "degrees_east" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:axis = "X" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:bounds = "lon_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon_bnds(lon, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat(lat) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:standard_name = "latitude"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:long_name = "latitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:units = "degrees_north" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:axis = "Y" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:bounds = "lat_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat_bnds(lat, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double plev(plev) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� plev:standard_name =
+"air_pressure" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� plev:long_name = "pressure" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� plev:units = "Pa" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� plev:axis = "Z" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� plev:positive = "down" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time(time) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:standard_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:long_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:units = "days since
+2030-1-1" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:axis = "T" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:calendar = "360_day" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:bounds = "time_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time_bnds(time, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float ta(time, plev, lat, lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:standard_name =
+"air_temperature" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:long_name = "Temperature" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:units = "K" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:cell_methods = "time: mean
+(interval: 20 minutes)" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:_FillValue = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:missing_value = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ta:original_name = "T" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>ta:history =
+" At�� </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>: CMOR altered the data in
+the following ways: replaced missing value flag (1.00000E+28) with standard
+missing value (1.00000E+20);" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>// global attributes:</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:title =
+"GICC� model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium
+experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:institution =
+"GICC (</span><span style='font-size:10.0pt;font-family:"Courier New"'>Generic</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>International</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Climate</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Center</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Geneva</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Switzerland</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:source =
+"GICCM1 (2002): atmosphere:� GICAM3 (gicam_0_brnchT_itea_2, T63L32);
+ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:contact =
+"Rusty Koder (koder at middle_earth.net)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:project_id =
+"IPCC Fourth Assessment" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� :table_id = "Table A1 (</span><span style='font-size:10.0pt;font-family:"Courier New"'>7 April 2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:experiment_id =
+"2xCO2 equilibrium experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:realization = 1
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:Conventions =
+"CF-1.0" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:history =
+"Output from archive/giccm_03_std_2xCO2_2256.� At </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, CMOR rewrote data to
+comply with CF standards and IPCC Fourth Assessment requirements" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:references =
+"Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).�
+Also see http://www.GICC.su/giccm/doc/index.html� 2XCO2 simulation described in
+Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:comment =
+"Equilibrium reached after 30-year spin-up after which data were output
+starting with nominal date of January 2030" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>data:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon = 0, 90, 180, 270 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -45, 45,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 45, 135,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 135, 225,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 225, 315 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat = 10, 20, 30 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 5, 15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 15, 25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 25, 35 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�plev = 10000, 20000, 30000, 40000, 50000 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time = 15, 45 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 30,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 30, 60 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�ta =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 150.5, 152.5, 154.5, 156.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 158.5, 160.5, 162.5, 164.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 166.5, 168.5, 170.5, 172.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 182.5, 184.5, 186.5, 188.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 190.5, 192.5, 194.5, 196.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 198.5, 200.5, 202.5, 204.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 214.5, 216.5, 218.5, 220.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 222.5, 224.5, 226.5, 228.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 230.5, 232.5, 234.5, 236.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 246.5, 248.5, 250.5, 252.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 254.5, 256.5, 258.5, 260.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 262.5, 264.5, 266.5, 268.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 278.5, 280.5, 282.5, 284.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 286.5, 288.5, 290.5, 292.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 294.5, 296.5, 298.5, 300.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 151, 153, 155, 157,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 159, 161, 163, 165,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 167, 169, 171, 173,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 183, 185, 187, 189,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 191, 193, 195, 197,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 199, 201, 203, 205,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 215, 217, 219, 221,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 223, 225, 227, 229,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 231, 233, 235, 237,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 247, 249, 251, 253,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 255, 257, 259, 261,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 263, 265, 267, 269,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 279, 281, 283, 285,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 287, 289, 291, 293,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 295, 297, 299, 301 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>}</span></p>
+
+<span style='font-size:10.0pt;font-family:"Courier New"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><a name="example_3"><span
+style='font-size:14.0pt'>Example 3</span></a><span style='font-size:14.0pt'>: Treatment
+of a scalar (i.e., singleton) dimension</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>Moisture in upper 0.1 m of soil column</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>(a function of longitude, latitude, month)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>netcdf mrsos_A1 {</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>dimensions:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lon = 4 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lat = 3 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� time = UNLIMITED ; // (2 currently)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� bnds = 2 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>variables:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon(lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:standard_name =
+"longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:long_name = "longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:units = "degrees_east" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:axis = "X" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:bounds = "lon_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon_bnds(lon, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat(lat) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:standard_name = "latitude"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:long_name = "latitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:units = "degrees_north" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:axis = "Y" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:bounds = "lat_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat_bnds(lat, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time(time) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:standard_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:long_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:units = "days since 2030-1-1"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:axis = "T" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:calendar = "360_day" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:bounds = "time_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time_bnds(time, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double depth ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� depth:standard_name = "depth"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� depth:long_name = "depth" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� depth:units = "m" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� depth:axis = "Z" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� depth:positive = "down" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� depth:bounds = "depth_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double depth_bnds(bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float mrsos(time, lat, lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:standard_name =
+"moisture_content_of_soil_layer" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:long_name = "Moisture in
+Upper 0.1 m of Soil Column" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:units = "kg m-2" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:cell_methods = "time: mean
+(interval: 20 minutes)" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:coordinates = "depth" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:_FillValue = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:missing_value = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� mrsos:original_name =
+"SOIL_WET" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>mrsos:comment =
+"includes subsurface frozen water but not surface snow and ice" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>mrsos:history =
+" At�� </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>: CMOR altered the data in
+the following ways: replaced missing value flag (1.00000E+28) with standard
+missing value (1.00000E+20);" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>// global attributes:</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:title =
+"GICC� model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium
+experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:institution =
+"GICC (</span><span style='font-size:10.0pt;font-family:"Courier New"'>Generic</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>International</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Climate</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Center</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Geneva</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Switzerland</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:source =
+"GICCM1 (2002): atmosphere:� GICAM3 (gicam_0_brnchT_itea_2, T63L32);
+ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:contact =
+"Rusty Koder (koder at middle_earth.net)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:project_id =
+"IPCC Fourth Assessment" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� :table_id = "Table A1 (</span><span style='font-size:10.0pt;font-family:"Courier New"'>7 April 2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:experiment_id =
+"2xCO2 equilibrium experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:realization = 1
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:Conventions =
+"CF-1.0" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:history =
+"Output from archive/giccm_03_std_2xCO2_2256.� At </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, CMOR rewrote data to
+comply with CF standards and IPCC Fourth Assessment requirements" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:references =
+"Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).�
+Also see http://www.GICC.su/giccm/doc/index.html� 2XCO2 simulation described in
+Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:comment =
+"Equilibrium reached after 30-year spin-up after which data were output
+starting with nominal date of January 2030" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>data:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon = 0, 90, 180, 270 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -45, 45,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 45, 135,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 135, 225,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 225, 315 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat = 10, 20, 30 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 5, 15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 15, 25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 25, 35 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time = 15, 45 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 30,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 30, 60 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�depth = 0.05 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�depth_bnds = 0, 0.1 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�mrsos =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 10, 50, 90, 130,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 170, 210, 250, 290,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 330, 370, 410, 450,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 20, 60, 100, 140,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 180, 220, 260, 300,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 340, 380, 420, 460 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>}</span></p>
+
+<span style='font-size:10.0pt;font-family:"Courier New"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p class=MsoNormal align=center style='text-align:center;text-autospace:none'><a
+name="example_4"><span style='font-size:14.0pt'>Example 4</span></a><span
+style='font-size:14.0pt'>: Treatment of a ocean basin labels</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>Northward ocean heat transport</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>(a function of latitude, ocean basin, month)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>netcdf hfogo_O1 {</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>dimensions:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lat = 3 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� region = 4 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� time = UNLIMITED ; // (2 currently)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� bnds = 2 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� strlen = 14 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>variables:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat(lat) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:standard_name = "latitude"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:long_name = "latitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:units = "degrees_north" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:axis = "Y" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:bounds = "lat_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat_bnds(lat, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� char geo_region(region, strlen) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� geo_region:standard_name = "region"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� geo_region:long_name = "</span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Ocean</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Basin</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time(time) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:standard_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:long_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:units = "days since
+2030-1-1" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:axis = "T" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:calendar = "360_day" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:bounds = "time_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time_bnds(time, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float hfogo(time, region, lat) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:standard_name =
+"northward_ocean_heat_transport" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:long_name = "Northward Ocean
+Heat Transport" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:units = "W" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>hfogo:cell_methods
+= "time: mean (interval: 20 minutes)�� longitude: sum" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:coordinates =
+"geo_region" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:_FillValue = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:missing_value = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� hfogo:original_name = "OFLUX"
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>hfogo:history =
+" At�� </span><span style='font-size:10.0pt;font-family:"Courier New"'>18:06:56</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>: CMOR altered the data in
+the following ways: replaced missing value flag (1.00000E+28) with standard
+missing value (1.00000E+20);" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>// global attributes:</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:title =
+"GICC� model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium
+experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:institution =
+"GICC (</span><span style='font-size:10.0pt;font-family:"Courier New"'>Generic</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>International</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Climate</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Center</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Geneva</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Switzerland</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:source =
+"GICCM1 (2002): atmosphere:� GICAM3 (gicam_0_brnchT_itea_2, T63L32);
+ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:contact =
+"Rusty Koder (koder at middle_earth.net)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:project_id =
+"IPCC Fourth Assessment" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� :table_id = "Table O1 (</span><span style='font-size:10.0pt;font-family:"Courier New"'>4 June 2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:experiment_id =
+"2xCO2 equilibrium experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:realization = 1
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:Conventions =
+"CF-1.0" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:history =
+"Output from archive/giccm_03_std_2xCO2_2256.� At </span><span style='font-size:10.0pt;font-family:"Courier New"'>18:06:56</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, CMOR rewrote data to
+comply with CF standards and IPCC Fourth Assessment requirements" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:references =
+"Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).�
+Also see http://www.GICC.su/giccm/doc/index.html� 2XCO2 simulation described in
+Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:comment =
+"Equilibrium reached after 30-year spin-up after which data were output
+starting with nominal date of January 2030" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>data:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat = 10, 20, 30 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 5, 15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 15, 25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 25, 35 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�geo_region =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� "atlantic_ocean",</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� "indian_ocean� ",</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� "pacific_ocean ",</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� "global_ocean� " ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time = 15, 45 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 30,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 30, 60 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�hfogo =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -1.9e+15, -1.5e+15, -1.1e+15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -3e+14, 1e+14, 5e+14,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 1.3e+15, 1.7e+15, 2.1e+15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 2.9e+15, 3.3e+15, 3.7e+15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -1.8e+15, -1.4e+15, -1e+15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -2e+14, 2e+14, 6e+14,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 1.4e+15, 1.8e+15, 2.2e+15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 3e+15, 3.4e+15, 3.8e+15 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>}</span></p>
+
+<span style='font-size:14.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p class=MsoNormal align=center style='text-align:center;text-autospace:none'><a
+name="example_5"><span style='font-size:14.0pt'>Example 5</span></a><span
+style='font-size:14.0pt'>: Treatment of model level data</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>Cloud fraction</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>(a function of longitude, latitude, model level, month)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>netcdf cl_A1 {</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>dimensions:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lon = 4 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lat = 3 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� lev = 5 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� time = UNLIMITED ; // (2 currently)</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� bnds = 2 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>variables:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon(lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:standard_name =
+"longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:long_name = "longitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:units = "degrees_east" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:axis = "X" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lon:bounds = "lon_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lon_bnds(lon, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat(lat) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:standard_name = "latitude"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:long_name = "latitude" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:units = "degrees_north" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:axis = "Y" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lat:bounds = "lat_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lat_bnds(lat, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lev(lev) ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>lev:standard_name
+= "atmosphere_hybrid_sigma_pressure_coordinate" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:long_name = "hybrid sigma
+pressure coordinate" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:units = "1" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:axis = "Z" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:positive = "down" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:bounds = "lev_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:formula = "p(n,k,j,i) = a(k)*p0
++ b(k)*ps(n,j,i)" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev:formula_terms = "p0: p0 a: a b:
+b ps: ps" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double lev_bnds(lev, bnds) ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>lev_bnds:standard_name
+= "atmosphere_hybrid_sigma_pressure_coordinate" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� lev_bnds:formula = "p(n,k,j,i) =
+a(k)*p0 + b(k)*ps(n,j,i)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>lev_bnds:formula_terms
+= "p0: p0 a: a_bnds b: b_bnds ps: ps" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time(time) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:standard_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:long_name = "time" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:units = "days since
+2030-1-1" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:axis = "T" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:calendar = "360_day" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� time:bounds = "time_bnds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double time_bnds(time, bnds) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double a_bnds(lev, bnds) ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>a_bnds:long_name
+= "hybrid sigma coordinate A coefficient for layer bounds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double b_bnds(lev, bnds) ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>b_bnds:long_name
+= "hybrid sigma coordinate B coefficient for layer bounds" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float p0 ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>p0:long_name =
+"reference pressure for hybrid sigma coordinate" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� p0:units = "Pa" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double a(lev) ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>a:long_name =
+"hybrid sigma coordinate A coefficient for layer" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� double b(lev) ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>b:long_name =
+"hybrid sigma coordinate B coefficient for layer" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float ps(time, lat, lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ps:long_name = "Surface
+Pressure" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� ps:units = "Pa" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����� float cl(time, lev, lat, lon) ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:standard_name = "cloud_area_fraction"
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:long_name = "Total Cloud
+Fraction" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:units = "%" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:cell_methods = "time: mean
+(interval: 20 minutes)" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:_FillValue = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:missing_value = 1.e+20f ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� cl:original_name = "CLOUD" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>cl:history =
+" At�� </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>: CMOR altered the data in
+the following ways: replaced missing value flag (1.00000E+28) with standard
+missing value (1.00000E+20);" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>// global attributes:</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:title =
+"GICC� model output prepared for IPCC Fourth Assessment 2xCO2 equilibrium
+experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:institution =
+"GICC (</span><span style='font-size:10.0pt;font-family:"Courier New"'>Generic</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>International</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Climate</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'> </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Center</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Geneva</span><span
+ style='font-size:10.0pt;font-family:"Courier New"'>, </span><span
+  style='font-size:10.0pt;font-family:"Courier New"'>Switzerland</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:source =
+"GICCM1 (2002): atmosphere:� GICAM3 (gicam_0_brnchT_itea_2, T63L32);
+ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:contact =
+"Rusty Koder (koder at middle_earth.net)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:project_id =
+"IPCC Fourth Assessment" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>����������� :table_id = "Table A1 (</span><span style='font-size:10.0pt;font-family:"Courier New"'>7 April 2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:experiment_id =
+"2xCO2 equilibrium experiment" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:realization = 1
+;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:Conventions =
+"CF-1.0" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:history =
+"Output from archive/giccm_03_std_2xCO2_2256.� At </span><span style='font-size:10.0pt;font-family:"Courier New"'>17:54:19</span><span
+style='font-size:10.0pt;font-family:"Courier New"'> on </span><span style='font-size:10.0pt;font-family:"Courier New"'>06/07/2004</span><span
+style='font-size:10.0pt;font-family:"Courier New"'>, CMOR rewrote data to
+comply with CF standards and IPCC Fourth Assessment requirements" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:references =
+"Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).�
+Also see http://www.GICC.su/giccm/doc/index.html� 2XCO2 simulation described in
+Dorkey et al. (Clim. Dyn., 2003, 323-357.)" ;</span></p>
+
+<p class=MsoNormal style='margin-left:1.3in;text-indent:-.3in;text-autospace:
+none'><span style='font-size:10.0pt;font-family:"Courier New"'>:comment =
+"Equilibrium reached after 30-year spin-up after which data were output
+starting with nominal date of January 2030" ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>data:</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon = 0, 90, 180, 270 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lon_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� -45, 45,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 45, 135,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 135, 225,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 225, 315 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat = 10, 20, 30 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lat_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 5, 15,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 15, 25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 25, 35 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lev = 0.100000001490116, 0.300000004470348,
+0.500000014901161, </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>��� 0.700000002980232, 0.900000013411045 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�lev_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 0.200000006705523,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.200000006705523, 0.400000005960464,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.400000005960464, 0.599999994039536,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.599999994039536, 0.799999982118607,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.799999982118607, 1 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time = 15, 45 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�time_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 30,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 30, 60 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�a_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 0.150000005960464,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.150000005960464, 0.25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.25, 0.25,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.25, 0.150000005960464,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.150000005960464, 0 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�b_bnds =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0, 0.0500000007450581,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.0500000007450581, 0.150000005960464,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.150000005960464, 0.349999994039536,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.349999994039536, 0.649999976158142,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 0.649999976158142, 1 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�p0 = 100000 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�a = 0.100000001490116, 0.200000002980232,
+0.300000011920929, </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>��� 0.200000002980232, 0.100000001490116 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�b = 0, 0.100000001490116, 0.200000002980232, 0.5, 0.800000011920929
+;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�ps =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 97100, 97500, 97900, 98300,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 98700, 99100, 99500, 99900,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 100300, 100700, 101100, 101500,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 97200, 97600, 98000, 98400,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 98800, 99200, 99600, 100000,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 100400, 100800, 101200, 101600 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>�cl =</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 50.1, 50.5, 50.9, 51.3,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 51.7, 52.1, 52.5, 52.9,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 53.3, 53.7, 54.1, 54.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 56.5, 56.9, 57.3, 57.7,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>��58.1, 58.5, 58.9, 59.3,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 59.7, 60.1, 60.5, 60.9,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 62.9, 63.3, 63.7, 64.1,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 64.5, 64.9, 65.3, 65.7,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 66.1, 66.5, 66.9, 67.3,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 69.3, 69.7, 70.1, 70.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 70.9, 71.3, 71.7, 72.1,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 72.5, 72.9, 73.3, 73.7,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 75.7, 76.1, 76.5, 76.9,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 77.3, 77.7, 78.1, 78.5,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 78.9, 79.3, 79.7, 80.1,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 50.2, 50.6, 51, 51.4,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 51.8, 52.2, 52.6, 53,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 53.4, 53.8, 54.2, 54.6,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 56.6, 57, 57.4, 57.8,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 58.2, 58.6, 59, 59.4,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 59.8, 60.2, 60.6, 61,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 63, 63.4, 63.8, 64.2,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 64.6, 65, 65.4, 65.8,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 66.2, 66.6, 67, 67.4,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 69.4, 69.8, 70.2, 70.6,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 71, 71.4, 71.8, 72.2,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 72.6, 73, 73.4, 73.8,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 75.8, 76.2, 76.6, 77,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 77.4, 77.8, 78.2, 78.6,</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>� 79, 79.4, 79.8, 80.2 ;</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'>}</span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
+font-family:"Courier New"'> </span></p>
+
+</div>
+
+<div><br clear=all>
+
+<hr align=left size=1 width="33%">
+
+<div id=ftn1>
+
+<p class=MsoFootnoteText><a href="#_ftnref1" name="_ftn1" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[1]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/software-portal/cmor">http://www-pcmdi.llnl.gov/software-portal/cmor</a></p>
+
+</div>
+
+<div id=ftn2>
+
+<p class=MsoFootnoteText><a href="#_ftnref2" name="_ftn2" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[2]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/software/cmor/cmor_users_guide.pdf">�http://www-pcmdi.llnl.gov/software/cmor/cmor_users_guide.pdf</a></p>
+
+</div>
+
+<div id=ftn3>
+
+<p class=MsoFootnoteText><a href="#_ftnref3" name="_ftn3" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[3]</span></span></span></a>
+See <a href="http://esg.llnl.gov/portal">�http://esg.llnl.gov/portal</a></p>
+
+</div>
+
+<div id=ftn4>
+
+<p class=MsoFootnoteText><a href="#_ftnref4" name="_ftn4" title=""><span
+class=FootnoteCharacters><span class=FootnoteCharacters><span style='font-size:
+10.0pt;font-family:"Times New Roman"'>[4]</span></span></span></a> See<a
+href="http://my.unidata.ucar.edu/content/software/netcdf">http://my.unidata.ucar.edu/content/software/netcdf</a></p>
+
+</div>
+
+<div id=ftn5>
+
+<p class=MsoFootnoteText><a href="#_ftnref5" name="_ftn5" title=""><span
+class=FootnoteCharacters><span class=FootnoteCharacters><span style='font-size:
+10.0pt;font-family:"Times New Roman"'>[5]</span></span></span></a> See <span
+class=MsoHyperlink><span style='color:blue'><a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">http://www.cgd.ucar.edu/cms/eaton/cf-metadata</a></span></span>
+</p>
+
+</div>
+
+<div id=ftn6>
+
+<p class=MsoFootnoteText><a href="#_ftnref6" name="_ftn6" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[6]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn7>
+
+<p class=MsoFootnoteText><a href="#_ftnref7" name="_ftn7" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[7]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn8>
+
+<p class=MsoFootnoteText><a href="#_ftnref8" name="_ftn8" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[8]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn9>
+
+<p class=MsoFootnoteText><a href="#_ftnref9" name="_ftn9" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[9]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn10>
+
+<p class=MsoFootnoteText><a href="#_ftnref10" name="_ftn10" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[10]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn11>
+
+<p class=MsoFootnoteText><a href="#_ftnref11" name="_ftn11" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[11]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn12>
+
+<p class=MsoFootnoteText style='text-align:justify'><a href="#_ftnref12"
+name="_ftn12" title=""><span class=FootnoteCharacters><span
+class=FootnoteCharacters><span style='font-size:10.0pt;font-family:"Times New Roman"'>[12]</span></span></span></a>
+As an example of "missing data",� consider a globally gridded dataset
+of ocean surface salinity.� The data representing land points on this data set
+would be missing.� Likewise, atmospheric data on portions of pressure surfaces
+that are underground are usually considered missing. </p>
+
+</div>
+
+<div id=ftn13>
+
+<p class=MsoFootnoteText><a href="#_ftnref13" name="_ftn13" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[13]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn14>
+
+<p class=MsoFootnoteText><a href="#_ftnref14" name="_ftn14" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[14]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn15>
+
+<p class=MsoFootnoteText><a href="#_ftnref15" name="_ftn15" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[15]</span></span></span></a>
+See <a href="http://my.unidata.ucar.edu/content/software/udunits/">http://my.unidata.ucar.edu/content/software/udunits/</a></p>
+
+</div>
+
+<div id=ftn16>
+
+<p class=MsoFootnoteText><a href="#_ftnref16" name="_ftn16" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[16]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn17>
+
+<p class=MsoFootnoteText><a href="#_ftnref17" name="_ftn17" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[17]</span></span></span></a>
+<a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#scalar_coords">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#scalar_coords</a></p>
+
+</div>
+
+<div id=ftn18>
+
+<p class=MsoFootnoteText><a href="#_ftnref18" name="_ftn18" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[18]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region</a></p>
+
+</div>
+
+<div id=ftn19>
+
+<p class=MsoFootnoteText><a href="#_ftnref19" name="_ftn19" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[19]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+<div id=ftn20>
+
+<p class=MsoFootnoteText><a href="#_ftnref20" name="_ftn20" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[20]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app</a></p>
+
+</div>
+
+<div id=ftn21>
+
+<p class=MsoFootnoteText><a href="#_ftnref21" name="_ftn21" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[21]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#bnds">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#bnds</a></p>
+
+</div>
+
+<div id=ftn22>
+
+<p class=MsoFootnoteText><a href="#_ftnref22" name="_ftn22" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[22]</span></span></span></a><a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vdim">
+http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vdim</a></p>
+
+</div>
+
+<div id=ftn23>
+
+<p class=MsoFootnoteText><a href="#_ftnref23" name="_ftn23" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[23]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app</a></p>
+
+</div>
+
+<div id=ftn24>
+
+<p class=MsoFootnoteText><a href="#_ftnref24" name="_ftn24" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[24]</span></span></span></a><a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/region.html">
+http://www.cgd.ucar.edu/cms/eaton/cf-metadata/region.html</a></p>
+
+</div>
+
+<div id=ftn25>
+
+<p class=MsoFootnoteText><a href="#_ftnref25" name="_ftn25" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[25]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#region</a></p>
+
+</div>
+
+<div id=ftn26>
+
+<p class=MsoFootnoteText><a href="#_ftnref26" name="_ftn26" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[26]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#ctype">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#ctype</a></p>
+
+</div>
+
+<div id=ftn27>
+
+<p class=MsoFootnoteText><a href="#_ftnref27" name="_ftn27" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[27]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#cal">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#cal</a></p>
+
+</div>
+
+<div id=ftn28>
+
+<p class=MsoFootnoteText><a href="#_ftnref28" name="_ftn28" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[28]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vnum">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vnum</a></p>
+
+</div>
+
+<div id=ftn29>
+
+<p class=MsoFootnoteText><a href="#_ftnref29" name="_ftn29" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[29]</span></span></span></a>
+<a href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#vrt_app</a></p>
+
+</div>
+
+<div id=ftn30>
+
+<p class=MsoFootnoteText><a href="#_ftnref30" name="_ftn30" title=""><span
+class=MsoFootnoteReference><span class=MsoFootnoteReference><span
+style='font-size:10.0pt;font-family:"Times New Roman"'>[30]</span></span></span></a>
+See <a href="http://www-pcmdi.llnl.gov/ipcc/standard_output.html">http://www-pcmdi.llnl.gov/ipcc/standard_output.html</a></p>
+
+</div>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/Doc/IPCC_output_requirements.pdf b/Doc/IPCC_output_requirements.pdf
new file mode 100644
index 0000000..8ced249
Binary files /dev/null and b/Doc/IPCC_output_requirements.pdf differ
diff --git a/Doc/cmor_users_guide.doc b/Doc/cmor_users_guide.doc
new file mode 100644
index 0000000..ba4b9f6
Binary files /dev/null and b/Doc/cmor_users_guide.doc differ
diff --git a/Doc/cmor_users_guide.htm b/Doc/cmor_users_guide.htm
new file mode 100644
index 0000000..7375a9d
--- /dev/null
+++ b/Doc/cmor_users_guide.htm
@@ -0,0 +1,16628 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns:css="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta name=Title content="Climate Model Output Rewriter (CMOR)">
+<meta name=Keywords content="">
+<meta http-equiv=Content-Type content="text/html; charset=utf-8">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 2008">
+<meta name=Originator content="Microsoft Word 2008">
+<link rel=File-List href="cmor_users_guide_files/filelist.xml">
+<title>Climate Model Output Rewriter (CMOR)</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Karl Taylor</o:Author>
+  <o:Template>Normal.dotm</o:Template>
+  <o:LastAuthor>Charles Samir Doutriaux</o:LastAuthor>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>0</o:TotalTime>
+  <o:LastPrinted>2010-04-28T00:06:00Z</o:LastPrinted>
+  <o:Created>2010-04-28T00:06:00Z</o:Created>
+  <o:LastSaved>2010-04-28T00:06:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>23759</o:Words>
+  <o:Characters>135427</o:Characters>
+  <o:Company>PCMDI</o:Company>
+  <o:Lines>1128</o:Lines>
+  <o:Paragraphs>270</o:Paragraphs>
+  <o:CharactersWithSpaces>166313</o:CharactersWithSpaces>
+  <o:Version>12.0</o:Version>
+ </o:DocumentProperties>
+ <o:OfficeDocumentSettings>
+  <o:PixelsPerInch>96</o:PixelsPerInch>
+  <o:TargetScreenSize>800x600</o:TargetScreenSize>
+ </o:OfficeDocumentSettings>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackMoves>false</w:TrackMoves>
+  <w:TrackFormatting/>
+  <w:ValidateAgainstSchemas/>
+  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+  <w:Compatibility>
+   <w:BreakWrappedTables/>
+   <w:UseNormalStyleForList/>
+   <w:DontUseIndentAsNumberingTabStop/>
+   <w:FELineBreak11/>
+   <w:WW11IndentRules/>
+   <w:DontAutofitConstrainedTables/>
+   <w:AutofitLikeWW11/>
+   <w:HangulWidthLikeWW11/>
+  </w:Compatibility>
+ </w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" LatentStyleCount="276">
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ at font-face
+	{font-family:Arial;
+	panose-1:2 11 6 4 2 2 2 2 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:auto;
+	mso-font-pitch:variable;
+	mso-font-signature:3 0 0 0 1 0;}
+ at font-face
+	{font-family:"Courier New";
+	panose-1:2 7 3 9 2 2 5 2 4 4;
+	mso-font-charset:0;
+	mso-generic-font-family:auto;
+	mso-font-pitch:variable;
+	mso-font-signature:3 0 0 0 1 0;}
+ at font-face
+	{font-family:Wingdings;
+	panose-1:5 2 1 2 1 8 4 8 7 8;
+	mso-font-charset:2;
+	mso-generic-font-family:auto;
+	mso-font-format:other;
+	mso-font-pitch:variable;
+	mso-font-signature:0 0 65536 0 -2147483648 0;}
+ at font-face
+	{font-family:Cambria;
+	panose-1:2 4 5 3 5 4 6 3 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:auto;
+	mso-font-pitch:variable;
+	mso-font-signature:3 0 0 0 1 0;}
+ at font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:auto;
+	mso-font-pitch:variable;
+	mso-font-signature:3 0 0 0 1 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+h1
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	page-break-after:avoid;
+	mso-outline-level:1;
+	font-size:16.0pt;
+	font-family:Arial;
+	mso-bidi-font-family:Arial;
+	mso-font-kerning:16.0pt;
+	mso-bidi-font-weight:bold;}
+h2
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	page-break-after:avoid;
+	mso-outline-level:2;
+	font-size:14.0pt;
+	font-family:Arial;
+	mso-bidi-font-family:Arial;
+	mso-bidi-font-weight:bold;
+	font-style:italic;}
+h3
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	page-break-after:avoid;
+	mso-outline-level:3;
+	font-size:13.0pt;
+	font-family:Arial;
+	mso-bidi-font-family:Arial;
+	mso-bidi-font-weight:bold;}
+h4
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	page-break-after:avoid;
+	mso-outline-level:4;
+	font-size:14.0pt;
+	font-family:"Times New Roman";
+	mso-bidi-font-weight:bold;}
+h5
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:5;
+	font-size:13.0pt;
+	font-family:"Times New Roman";
+	mso-bidi-font-weight:bold;
+	font-style:italic;}
+h6
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:6;
+	font-size:11.0pt;
+	font-family:"Times New Roman";
+	mso-bidi-font-weight:bold;}
+p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:7;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc1, li.MsoToc1, div.MsoToc1
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:6.0pt;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";
+	font-weight:bold;
+	mso-bidi-font-weight:normal;}
+p.MsoToc2, li.MsoToc2, div.MsoToc2
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:12.0pt;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";
+	font-weight:bold;
+	mso-bidi-font-weight:normal;}
+p.MsoToc3, li.MsoToc3, div.MsoToc3
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:24.0pt;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc4, li.MsoToc4, div.MsoToc4
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.5in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc5, li.MsoToc5, div.MsoToc5
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:48.0pt;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc6, li.MsoToc6, div.MsoToc6
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:60.0pt;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc7, li.MsoToc7, div.MsoToc7
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:1.0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc8, li.MsoToc8, div.MsoToc8
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:84.0pt;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoToc9, li.MsoToc9, div.MsoToc9
+	{mso-style-update:auto;
+	mso-style-noshow:yes;
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:96.0pt;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-ascii-font-family:Cambria;
+	mso-fareast-font-family:"Times New Roman";
+	mso-hansi-font-family:Cambria;
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoNormalIndent, li.MsoNormalIndent, div.MsoNormalIndent
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.5in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
+	{mso-style-noshow:yes;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
+	{mso-style-link:"Comment Text Char";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoHeader, li.MsoHeader, div.MsoHeader
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:center 3.0in right 6.0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoFooter, li.MsoFooter, div.MsoFooter
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:center 3.0in right 6.0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+span.MsoFootnoteReference
+	{mso-style-noshow:yes;
+	vertical-align:super;}
+span.MsoCommentReference
+	{mso-ansi-font-size:8.0pt;
+	mso-bidi-font-size:8.0pt;}
+span.MsoEndnoteReference
+	{vertical-align:super;}
+p.MsoEndnoteText, li.MsoEndnoteText, div.MsoEndnoteText
+	{mso-style-link:"Endnote Text Char";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoList, li.MsoList, div.MsoList
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.25in;
+	margin-bottom:.0001pt;
+	text-indent:-.25in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoList2, li.MsoList2, div.MsoList2
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.5in;
+	margin-bottom:.0001pt;
+	text-indent:-.25in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoListBullet2, li.MsoListBullet2, div.MsoListBullet2
+	{mso-style-update:auto;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.5in;
+	margin-bottom:.0001pt;
+	text-indent:-.25in;
+	mso-pagination:widow-orphan;
+	mso-list:l1 level1 lfo22;
+	tab-stops:list .5in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoListBullet3, li.MsoListBullet3, div.MsoListBullet3
+	{mso-style-update:auto;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.75in;
+	margin-bottom:.0001pt;
+	text-indent:-.25in;
+	mso-pagination:widow-orphan;
+	mso-list:l0 level1 lfo23;
+	tab-stops:list .75in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoTitle, li.MsoTitle, div.MsoTitle
+	{margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:16.0pt;
+	font-family:Arial;
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:Arial;
+	mso-font-kerning:14.0pt;
+	font-weight:bold;}
+p.MsoSignature, li.MsoSignature, div.MsoSignature
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:3.0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:6.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:6.0pt;
+	margin-left:.25in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
+	{margin-top:0in;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:12.0pt;
+	font-family:Arial;
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:Arial;}
+p.MsoDate, li.MsoDate, div.MsoDate
+	{mso-style-next:Normal;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+a:link, span.MsoHyperlink
+	{color:blue;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:purple;
+	text-decoration:underline;
+	text-underline:single;}
+em
+	{mso-bidi-font-style:italic;}
+p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
+	{mso-style-parent:"Comment Text";
+	mso-style-link:"Comment Subject Char";
+	mso-style-next:"Comment Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";
+	font-weight:bold;}
+p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
+	{mso-style-noshow:yes;
+	mso-style-link:"Balloon Text Char";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:Tahoma;}
+p.MsoRMPane, li.MsoRMPane, div.MsoRMPane
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.ShortReturnAddress, li.ShortReturnAddress, div.ShortReturnAddress
+	{mso-style-name:"Short Return Address";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.PPLine, li.PPLine, div.PPLine
+	{mso-style-name:"PP Line";
+	mso-style-parent:Signature;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:3.0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+p.InsideAddressName, li.InsideAddressName, div.InsideAddressName
+	{mso-style-name:"Inside Address Name";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+span.CommentTextChar
+	{mso-style-name:"Comment Text Char";
+	mso-style-locked:yes;
+	mso-style-link:"Comment Text";}
+span.CommentSubjectChar
+	{mso-style-name:"Comment Subject Char";
+	mso-style-locked:yes;
+	mso-style-parent:"Comment Text Char";
+	mso-style-link:"Comment Subject";
+	font-weight:bold;}
+span.EndnoteTextChar
+	{mso-style-name:"Endnote Text Char";
+	mso-style-locked:yes;
+	mso-style-link:"Endnote Text";}
+p.MediumList2-Accent21, li.MediumList2-Accent21, div.MediumList2-Accent21
+	{mso-style-name:"Medium List 2 - Accent 21";
+	mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-bidi-font-family:"Times New Roman";}
+span.tag
+	{mso-style-name:tag;
+	mso-style-parent:Emphasis;
+	mso-ansi-font-size:12.0pt;
+	font-family:Cambria;
+	mso-ascii-font-family:Cambria;
+	mso-hansi-font-family:Cambria;
+	color:#002060;
+	font-style:normal;
+	mso-bidi-font-style:italic;}
+span.componentChar
+	{mso-style-name:"component Char";
+	mso-ansi-font-size:14.0pt;
+	mso-bidi-font-size:12.0pt;
+	color:#C00000;
+	mso-ansi-language:EN-US;
+	font-weight:bold;
+	mso-bidi-font-weight:normal;}
+span.BalloonTextChar
+	{mso-style-name:"Balloon Text Char";
+	mso-style-noshow:yes;
+	mso-style-locked:yes;
+	mso-style-link:"Balloon Text";
+	mso-ansi-font-size:8.0pt;
+	mso-bidi-font-size:8.0pt;
+	font-family:Tahoma;
+	mso-ascii-font-family:Tahoma;
+	mso-hansi-font-family:Tahoma;
+	mso-bidi-font-family:Tahoma;}
+span.msoIns
+	{mso-style-type:export-only;
+	mso-style-name:"";
+	text-decoration:underline;
+	text-underline:single;
+	color:teal;}
+ /* Page Definitions */
+ at page
+	{mso-footnote-separator:url(":cmor_users_guide_files:header.htm") fs;
+	mso-footnote-continuation-separator:url(":cmor_users_guide_files:header.htm") fcs;
+	mso-endnote-separator:url(":cmor_users_guide_files:header.htm") es;
+	mso-endnote-continuation-separator:url(":cmor_users_guide_files:header.htm") ecs;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.2in 1.0in 1.2in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-header:url(":cmor_users_guide_files:header.htm") h1;
+	mso-even-footer:url(":cmor_users_guide_files:header.htm") ef1;
+	mso-footer:url(":cmor_users_guide_files:header.htm") f1;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+ /* List Definitions */
+ at list l0
+	{mso-list-id:-126;
+	mso-list-type:simple;
+	mso-list-template-ids:1856698860;}
+ at list l0:level1
+	{mso-level-number-format:bullet;
+	mso-level-style-link:"List Bullet 3";
+	mso-level-text:;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l1
+	{mso-list-id:-125;
+	mso-list-type:simple;
+	mso-list-template-ids:-818792322;}
+ at list l1:level1
+	{mso-level-number-format:bullet;
+	mso-level-style-link:"List Bullet 2";
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l2
+	{mso-list-id:45883531;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1448904216 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l2:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l3
+	{mso-list-id:55669800;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-2088049960 120734710 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l3:level1
+	{mso-level-start-at:5;
+	mso-level-text:%1;
+	mso-level-tab-stop:65.25pt;
+	mso-level-number-position:left;
+	margin-left:65.25pt;
+	text-indent:-43.5pt;}
+ at list l4
+	{mso-list-id:105347917;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-13210420 -295509542 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l4:level1
+	{mso-level-start-at:5;
+	mso-level-text:%1;
+	mso-level-tab-stop:42.0pt;
+	mso-level-number-position:left;
+	margin-left:42.0pt;
+	text-indent:-24.0pt;}
+ at list l5
+	{mso-list-id:139344800;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-1427087294 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l5:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.75in;
+	text-indent:-.25in;}
+ at list l6
+	{mso-list-id:212010887;
+	mso-list-type:hybrid;
+	mso-list-template-ids:14208904 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l6:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l7
+	{mso-list-id:219905945;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-631860122 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l7:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l8
+	{mso-list-id:321469250;
+	mso-list-type:hybrid;
+	mso-list-template-ids:750938280 639925018 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l8:level1
+	{mso-level-start-at:5;
+	mso-level-text:%1;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.5in;}
+ at list l9
+	{mso-list-id:376588931;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1780916262 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l9:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l10
+	{mso-list-id:391277258;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1350083534 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l10:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l11
+	{mso-list-id:579409007;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1269599870 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l11:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l12
+	{mso-list-id:607471321;
+	mso-list-type:hybrid;
+	mso-list-template-ids:17607110 -1613584814 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l12:level1
+	{mso-level-start-at:7;
+	mso-level-text:%1;
+	mso-level-tab-stop:48.0pt;
+	mso-level-number-position:left;
+	margin-left:48.0pt;
+	text-indent:-30.0pt;}
+ at list l13
+	{mso-list-id:646059410;
+	mso-list-type:hybrid;
+	mso-list-template-ids:2033859298 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l13:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l14
+	{mso-list-id:672683485;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1711471104 1817609782 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l14:level1
+	{mso-level-start-at:6;
+	mso-level-text:%1;
+	mso-level-tab-stop:39.75pt;
+	mso-level-number-position:left;
+	margin-left:39.75pt;
+	text-indent:-.25in;}
+ at list l15
+	{mso-list-id:827478285;
+	mso-list-type:hybrid;
+	mso-list-template-ids:657648686 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l15:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l16
+	{mso-list-id:943460177;
+	mso-list-type:hybrid;
+	mso-list-template-ids:859328410 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l16:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l17
+	{mso-list-id:956909574;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-790340492 67698689 66569 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l17:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l17:level2
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:1.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l18
+	{mso-list-id:988361926;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-1059935788 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l18:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l19
+	{mso-list-id:1091197613;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-1358942726 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l19:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l20
+	{mso-list-id:1100566653;
+	mso-list-type:hybrid;
+	mso-list-template-ids:283172748 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l20:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l21
+	{mso-list-id:1181312500;
+	mso-list-type:hybrid;
+	mso-list-template-ids:260442326 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l21:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l22
+	{mso-list-id:1274365608;
+	mso-list-template-ids:-540359662;}
+ at list l22:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:.25in;
+	text-indent:-.25in;}
+ at list l22:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-text:"%2\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:.5in;
+	text-indent:-.25in;}
+ at list l22:level3
+	{mso-level-number-format:roman-lower;
+	mso-level-text:"%3\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;}
+ at list l22:level4
+	{mso-level-text:"\(%4\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.0in;
+	text-indent:-.25in;}
+ at list l22:level5
+	{mso-level-text:"%5\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l22:level6
+	{mso-level-number-format:roman-lower;
+	mso-level-text:"\(%6\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l22:level7
+	{mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.75in;
+	text-indent:-.25in;}
+ at list l22:level8
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:2.0in;
+	text-indent:-.25in;}
+ at list l22:level9
+	{mso-level-number-format:roman-lower;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:2.25in;
+	text-indent:-.25in;}
+ at list l23
+	{mso-list-id:1314213867;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1043500168 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l23:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l24
+	{mso-list-id:1326470646;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-1551748782 294664098 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l24:level1
+	{mso-level-start-at:4;
+	mso-level-text:%1;
+	mso-level-tab-stop:65.25pt;
+	mso-level-number-position:left;
+	margin-left:65.25pt;
+	text-indent:-43.5pt;}
+ at list l25
+	{mso-list-id:1380133840;
+	mso-list-type:hybrid;
+	mso-list-template-ids:689969892 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l25:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l26
+	{mso-list-id:1381784092;
+	mso-list-template-ids:-2088049960;}
+ at list l26:level1
+	{mso-level-start-at:5;
+	mso-level-text:%1;
+	mso-level-tab-stop:65.25pt;
+	mso-level-number-position:left;
+	margin-left:65.25pt;
+	text-indent:-43.5pt;}
+ at list l26:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:75.75pt;
+	mso-level-number-position:left;
+	margin-left:75.75pt;
+	text-indent:-.25in;}
+ at list l26:level3
+	{mso-level-number-format:roman-lower;
+	mso-level-tab-stop:111.75pt;
+	mso-level-number-position:right;
+	margin-left:111.75pt;
+	text-indent:-9.0pt;}
+ at list l26:level4
+	{mso-level-tab-stop:147.75pt;
+	mso-level-number-position:left;
+	margin-left:147.75pt;
+	text-indent:-.25in;}
+ at list l26:level5
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:183.75pt;
+	mso-level-number-position:left;
+	margin-left:183.75pt;
+	text-indent:-.25in;}
+ at list l26:level6
+	{mso-level-number-format:roman-lower;
+	mso-level-tab-stop:219.75pt;
+	mso-level-number-position:right;
+	margin-left:219.75pt;
+	text-indent:-9.0pt;}
+ at list l26:level7
+	{mso-level-tab-stop:255.75pt;
+	mso-level-number-position:left;
+	margin-left:255.75pt;
+	text-indent:-.25in;}
+ at list l26:level8
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:291.75pt;
+	mso-level-number-position:left;
+	margin-left:291.75pt;
+	text-indent:-.25in;}
+ at list l26:level9
+	{mso-level-number-format:roman-lower;
+	mso-level-tab-stop:327.75pt;
+	mso-level-number-position:right;
+	margin-left:327.75pt;
+	text-indent:-9.0pt;}
+ at list l27
+	{mso-list-id:1403912280;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-709174628 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l27:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l28
+	{mso-list-id:1479883753;
+	mso-list-type:hybrid;
+	mso-list-template-ids:352386170 -2036413258 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l28:level1
+	{mso-level-start-at:7;
+	mso-level-text:%1;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l29
+	{mso-list-id:1510365485;
+	mso-list-type:hybrid;
+	mso-list-template-ids:905736748 -312474040 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l29:level1
+	{mso-level-text:%1;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-45.0pt;}
+ at list l30
+	{mso-list-id:1525896057;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1071933926 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l30:level1
+	{mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l31
+	{mso-list-id:1783185823;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1219109978 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l31:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l32
+	{mso-list-id:1867713661;
+	mso-list-template-ids:67698717;}
+ at list l32:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:.25in;
+	text-indent:-.25in;}
+ at list l32:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-text:"%2\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:.5in;
+	text-indent:-.25in;}
+ at list l32:level3
+	{mso-level-number-format:roman-lower;
+	mso-level-text:"%3\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;}
+ at list l32:level4
+	{mso-level-text:"\(%4\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.0in;
+	text-indent:-.25in;}
+ at list l32:level5
+	{mso-level-number-format:alpha-lower;
+	mso-level-text:"\(%5\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l32:level6
+	{mso-level-number-format:roman-lower;
+	mso-level-text:"\(%6\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l32:level7
+	{mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.75in;
+	text-indent:-.25in;}
+ at list l32:level8
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:2.0in;
+	text-indent:-.25in;}
+ at list l32:level9
+	{mso-level-number-format:roman-lower;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:2.25in;
+	text-indent:-.25in;}
+ at list l33
+	{mso-list-id:1945920541;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-835531592 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l33:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l34
+	{mso-list-id:1969622602;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-737529962 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l34:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.5in;
+	text-indent:-.25in;}
+ at list l35
+	{mso-list-id:2107723004;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-1790176916 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l35:level1
+	{mso-level-text:"%1\)";
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l36
+	{mso-list-id:2144539126;
+	mso-list-type:hybrid;
+	mso-list-template-ids:1847211504 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l36:level1
+	{mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ol
+	{margin-bottom:0in;}
+ul
+	{margin-bottom:0in;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableSimple1
+	{mso-style-name:"Table Simple 1";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border-top:solid green 1.5pt;
+	border-left:none;
+	border-bottom:solid green 1.5pt;
+	border-right:none;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableSimple1FirstRow
+	{mso-style-name:"Table Simple 1";
+	mso-table-condition:first-row;
+	mso-tstyle-border-bottom:.75pt solid green;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;}
+table.MsoTableSimple1LastRow
+	{mso-style-name:"Table Simple 1";
+	mso-table-condition:last-row;
+	mso-tstyle-border-top:.75pt solid green;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;}
+table.MsoTableColumns1
+	{mso-style-name:"Table Columns 1";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:1;
+	border:solid black 1.5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+table.MsoTableColumns1FirstRow
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:first-row;
+	mso-tstyle-border-bottom:2.25pt double black;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;
+	mso-ansi-font-weight:normal;
+	mso-bidi-font-weight:normal;}
+table.MsoTableColumns1LastRow
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:last-row;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;
+	mso-ansi-font-weight:normal;
+	mso-bidi-font-weight:normal;}
+table.MsoTableColumns1FirstCol
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:first-column;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;
+	mso-ansi-font-weight:normal;
+	mso-bidi-font-weight:normal;}
+table.MsoTableColumns1LastCol
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:last-column;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;
+	mso-ansi-font-weight:normal;
+	mso-bidi-font-weight:normal;}
+table.MsoTableColumns1OddColumn
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:odd-column;
+	mso-tstyle-shading:white;
+	mso-tstyle-pattern:gray-25 black;
+	color:windowtext;}
+table.MsoTableColumns1EvenColumn
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:even-column;
+	mso-tstyle-shading:white;
+	mso-tstyle-pattern:gray-25 yellow;
+	color:windowtext;}
+table.MsoTableColumns1NECell
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:ne-cell;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;
+	mso-ansi-font-weight:bold;
+	mso-bidi-font-weight:bold;}
+table.MsoTableColumns1SWCell
+	{mso-style-name:"Table Columns 1";
+	mso-table-condition:sw-cell;
+	mso-tstyle-diagonal-down:0in none windowtext;
+	mso-tstyle-diagonal-up:0in none windowtext;
+	mso-ansi-font-weight:bold;
+	mso-bidi-font-weight:bold;}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:16.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:16.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:16.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:16.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:16.0pt'>Climate Model Output Rewriter (CMOR)<o:p></o:p></span></b></p>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:14.0pt'>Version 2.0 (CMOR2)<o:p></o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>Charles Doutriaux, Karl E. Taylor<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><!--[if supportFields]><span
+style='font-size:14.0pt'><span style='mso-element:field-begin'></span><span
+style="mso-spacerun: yes"> </span>TIME \@ "MMMM d, yyyy" <span
+style='mso-element:field-separator'></span></span><![endif]--><span
+style='font-size:14.0pt'><span style='mso-no-proof:yes'>April 27, 2010</span></span><!--[if supportFields]><span
+style='font-size:14.0pt'><span style='mso-element:field-end'></span></span><![endif]--><span
+style='font-size:14.0pt'><o:p></o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center;tab-stops:272.25pt'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;background:
+silver;mso-highlight:silver'>A Revision of </span></b><b style='mso-bidi-font-weight:
+normal'><span style='font-size:14.0pt'>Version 1.0 (CMOR1)</span></b><span
+style='font-size:14.0pt'><o:p></o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>Karl E. Taylor, Charles Doutriaux, and Jean-Yves
+Peterschmitt<o:p></o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'>July 14, 2006<o:p></o:p></span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><span
+style='font-size:14.0pt'><o:p> </o:p></span></p>
+
+<b><span style='font-size:14.0pt;font-family:Arial;mso-fareast-font-family:
+"Times New Roman";mso-bidi-font-family:Arial;mso-font-kerning:16.0pt;
+mso-ansi-language:EN-US;mso-fareast-language:EN-US'><br clear=ALL
+style='page-break-before:always'>
+</span></b>
+
+<h1><a name="_Toc129421995"></a><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='font-size:14.0pt'><span
+style="mso-spacerun: yes"> </span>TOC \o "1-3" <span
+style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'><o:p></o:p></span></span></h1>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Design Considerations and
+Overview<span style='mso-tab-count:1 dotted'>............................................................................ </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007294
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>4<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003200390034000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Acknowledgements<span
+style='mso-tab-count:1 dotted'>......................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007295
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>10<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003200390035000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Description of CMOR Functions<span
+style='mso-tab-count:1 dotted'>................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007296
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>11<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003200390036000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Preliminary notes:<span
+style='mso-tab-count:1 dotted'>.......................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007297
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>11<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003200390037000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Setting up CMOR<span
+style='mso-tab-count:1 dotted'>............................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007298
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>12<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003200390038000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Initialize CMOR: cmor_setup<span
+style='mso-tab-count:1 dotted'>....................................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007299
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>12<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003200390039000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Dealing with Dataset<span
+style='mso-tab-count:1 dotted'>...................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007300
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>13<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300030000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define a Dataset: cmor_dataset<span
+style='mso-tab-count:1 dotted'>.................................................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007301
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>13<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300031000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define a Dataset Attribute:
+cmor_set_cur_dataset_attribute<span style='mso-tab-count:1 dotted'>................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007302
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>16<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300032000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Retrieve<span
+style="mso-spacerun: yes">  </span>a Dataset Attribute:
+cmor_get_cur_dataset_attribute<span style='mso-tab-count:1 dotted'>........................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007303
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>17<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300033000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Inquire whether a Dataset
+Attribute Exists: cmor_has_cur_dataset_attribute<span style='mso-tab-count:
+1 dotted'>......................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007304
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>17<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300034000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Dealing with tables<span
+style='mso-tab-count:1 dotted'>......................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007305
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>18<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300035000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Loading a Table in Memory from
+File:cmor_load_table<span style='mso-tab-count:1 dotted'>............................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007306
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>18<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300036000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Loading a Table from Memory:cmor_set_table<span
+style='mso-tab-count:1 dotted'>............................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007307
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>18<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300037000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Dealing with Axes<span
+style='mso-tab-count:1 dotted'>........................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007308
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>18<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300038000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define an Axis: cmor_axis<span
+style='mso-tab-count:1 dotted'>............................................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007309
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>18<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300300039000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define an Axis Attribute:
+cmor_set_axis_attribute<span style='mso-tab-count:1 dotted'>........................................................................................ </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007310
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>21<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310030000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Retrieve an Axis Attribute:
+cmor_get_axis_attribute<span style='mso-tab-count:1 dotted'>.................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007311
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>21<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310031000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Inquire whether an Axis Attribute
+Exists: cmor_has_axis_attribute<span style='mso-tab-count:1 dotted'>................................................ </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007312
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>22<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310032000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Dealing with Grids<span
+style='mso-tab-count:1 dotted'>.......................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007313
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>22<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310033000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define a Grid: cmor_grid<span
+style='mso-tab-count:1 dotted'>................................................................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007314
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>22<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310034000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define Grid Mapping Parameters:
+cmor_set_grid_mapping<span style='mso-tab-count:1 dotted'>.................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007315
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>23<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310035000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define a Coordinate Variable for
+a Time Varying Grid: cmor_time_varying_grid_coordinate<span style='mso-tab-count:
+1'>               </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007316
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>25<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310036000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Vertical Dimensions<span
+style='mso-tab-count:1 dotted'>....................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007317
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>26<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310037000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Provide Non-Dimensional Vertical
+Coordinate Information: cmor_zfactor<span style='mso-tab-count:1 dotted'>............................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007318
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>26<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310038000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Variables<span style='mso-tab-count:
+1 dotted'>......................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007319
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>28<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300310039000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define a Variable: cmor_variable<span
+style='mso-tab-count:1 dotted'>.............................................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007320
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>28<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320030000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Define a Variable Attribute:
+cmor_set_variable_attribute<span style='mso-tab-count:1 dotted'>....................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007321
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>30<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320031000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Retrieve a Variable Attribute:
+cmor_get_variable_attribute<span style='mso-tab-count:1 dotted'>.................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007322
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>31<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320032000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Inquire Whether a Variable
+Attribute Exists: cmor_has_variable_attribute<span style='mso-tab-count:1 dotted'>............................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007323
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>31<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320033000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Writing Data<span
+style='mso-tab-count:1 dotted'>................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007324
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>32<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320034000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Generate Output Path:
+cmor_create_output_path<span style='mso-tab-count:1 dotted'>......................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007325
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>32<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320035000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Write Data to File: cmor_write<span
+style='mso-tab-count:1 dotted'>.................................................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007326
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>32<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320036000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Close File(s): cmor_close<span
+style='mso-tab-count:1 dotted'>............................................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007327
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>34<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320037000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Appendix A: Errors in CMOR<span
+style='mso-tab-count:1 dotted'>........................................................................................ </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007328
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>36<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320038000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Critical Errors<span
+style='mso-tab-count:1 dotted'>.................................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007329
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>36<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300320039000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Appendix B: Limits in cmor<span
+style='mso-tab-count:1 dotted'>.......................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007330
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>39<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330030000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Appendix C: Sample Codes<span
+style='mso-tab-count:1 dotted'>............................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007331
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>40<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330031000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>FORTRAN<span style='mso-tab-count:
+1 dotted'>......................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007332
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>40<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330032000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Sample Program 1<span
+style='mso-tab-count:1 dotted'>............................................................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007333
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>40<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330033000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>C<span style='mso-tab-count:1 dotted'>....................................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007334
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>49<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330034000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Sample Program 1: grids<span
+style='mso-tab-count:1 dotted'>................................................................................................................................................ </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007335
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>49<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330035000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>PYTHON<span style='mso-tab-count:
+1 dotted'>.......................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007336
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>53<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330036000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Sample Program 1<span
+style='mso-tab-count:1 dotted'>............................................................................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007337
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>53<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330037000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc3 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Sample Program 2: grids<span
+style='mso-tab-count:1 dotted'>................................................................................................................................................ </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007338
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>54<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330038000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc1 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>Appendix D: MIP Tables<span
+style='mso-tab-count:1 dotted'>................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007339
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>57<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300330039000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='mso-ascii-font-family:Cambria;mso-ascii-theme-font:minor-latin;
+mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
+mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:
+"Times New Roman";mso-bidi-theme-font:minor-bidi;font-weight:normal;mso-no-proof:
+yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>CMOR 1 sample<span
+style='mso-tab-count:1 dotted'>............................................................................................................... </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007340
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>57<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300340030000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<p class=MsoToc2 style='tab-stops:right dotted 438.7pt'><span style='mso-bookmark:
+_Toc129421995'><span style='mso-no-proof:yes'>CMOR 2 (table excerpts)<span
+style='mso-tab-count:1 dotted'>................................................................................................. </span></span></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-begin'></span><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'> PAGEREF _Toc134007341
+\h <span style='mso-element:field-separator'></span></span></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><span style='mso-no-proof:yes'>65<!--[if gte mso 9]><xml>
+ <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100330034003000300037003300340031000000</w:data>
+</xml><![endif]--></span></span><!--[if supportFields]><span style='mso-bookmark:
+_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-bookmark:_Toc129421995'><span
+style='font-size:12.0pt;mso-ascii-font-family:Cambria;mso-ascii-theme-font:
+minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
+minor-fareast;mso-hansi-font-family:Cambria;mso-hansi-theme-font:minor-latin;
+mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
+font-weight:normal;mso-no-proof:yes'><o:p></o:p></span></span></p>
+
+<h1><span style='mso-bookmark:_Toc129421995'></span><!--[if supportFields]><span
+style='mso-bookmark:_Toc129421995'></span><span style='mso-element:field-end'></span><![endif]--><span
+style='mso-bookmark:_Toc129421995'><br clear=ALL style='page-break-before:always'>
+<a name="_Toc134007294">Design Considerations and Overview</a></span><span
+style='mso-bookmark:_Toc134007294'></span><span style='mso-bookmark:_Toc129421995'></span><span
+style='font-size:14.0pt'><o:p></o:p></span></h1>
+
+<p class=MsoNormal><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>This document describes Version 2
+of a software library called "Climate Model Output Rewriter" (CMOR2),<a
+style='mso-footnote-id:ftn' href="#_ftn1" name="_ftnref" title=""><span
+class=MsoFootnoteReference><span style='mso-special-character:footnote'><![if !supportFootnotes]>[1]<![endif]></span></span></a>
+written in C with access also provided via Fortran 90 and through Python<a
+style='mso-footnote-id:ftn' href="#_ftn2" name="_ftnref" title=""><span
+class=MsoFootnoteReference><span style='mso-special-character:footnote'><![if !supportFootnotes]>[2]<![endif]></span></span></a>.
+<span style="mso-spacerun: yes"> </span>CMOR is used to produce
+CF-compliant<a style='mso-footnote-id:ftn' href="#_ftn3" name="_ftnref" title=""><span
+class=MsoFootnoteReference><span style='mso-special-character:footnote'><![if !supportFootnotes]>[3]<![endif]></span></span></a>
+netCDF<a style='mso-footnote-id:ftn' href="#_ftn4" name="_ftnref" title=""><span
+class=MsoFootnoteReference><span style='mso-special-character:footnote'><![if !supportFootnotes]>[4]<![endif]></span></span></a>
+files.<span style="mso-spacerun: yes">  </span>The structure of the files
+created by CMOR and the metadata they contain fulfill the requirements of many
+of the climate community's standard model experiments (which are referred to
+here as "MIPs"<a style='mso-footnote-id:ftn' href="#_ftn5"
+name="_ftnref" title=""><span class=MsoFootnoteReference><span
+style='mso-special-character:footnote'><![if !supportFootnotes]>[5]<![endif]></span></span></a>
+and include, for example, AMIP, CMIP, CFMIP, PMIP, APE, and IPCC scenario
+runs).<span style="mso-spacerun: yes">   </span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>CMOR was not designed to serve as
+an all-purpose writer of CF-compliant netCDF files, but simply to reduce the
+effort required to prepare and manage MIP model output.<span
+style="mso-spacerun: yes">  </span>Although MIPs encourage systematic
+analysis of results across models, this is only easy to do if the model output
+is written in a common format with files structured similarly and with
+sufficient metadata uniformly stored according to a common standard.<span
+style="mso-spacerun: yes">  </span>Individual modeling groups store their
+data in different ways, but if a group can read its own data, then it should
+easily be able to transform the data, using CMOR, into the common format
+required by the MIPs.<span style="mso-spacerun: yes">   </span>The
+adoption of CMOR as a standard code for exchanging climate data will facilitate
+participation in MIPs because after learning how to satisfy the output requirements
+of one MIP, it will be easy to prepare output for other MIPs.</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>CMOR output has the following
+characteristics:</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l21 level1 lfo3;
+     tab-stops:list .5in'>Each file contains a single output variable (along
+     with coordinate/grid variables, attributes and other metadata) from a
+     single model and a single simulation (i.e., from a single ensemble member
+     of a single climate experiment).<span style="mso-spacerun: yes"> 
+     </span>This method of structuring model output best serves the needs of
+     most researchers who are typically interested in only a few of the many
+     variables in the MIP databases.<span style="mso-spacerun: yes"> 
+     </span>Data requests can be satisfied by simply sending the appropriate
+     file(s) without first extracting the individual field(s) of interest.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l21 level1 lfo3;
+     tab-stops:list .5in'>There is flexibility in specifying how many time
+     slices (samples) are stored in a single file. A single file can contain
+     all the time-samples for a given variable and climate experiment, or the
+     samples can be distributed in a sequence of files. </li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l21 level1 lfo3;
+     tab-stops:list .5in'>Much of the metadata written to the output files is
+     defined in MIP-specific tables of information, which in this document are
+     referred to simply as "MIP tables".<span style="mso-spacerun:
+     yes">  </span>These tables are ASCII files that can be read by CMOR
+     and are typically made available from MIP web sites.<span
+     style="mso-spacerun: yes">  </span>Because these tables contain much
+     of the metadata that is useful in the MIP context, they are the key to
+     reducing the programming burden imposed on the individual users
+     contributing data to a MIP.<span style="mso-spacerun: yes"> 
+     </span>Additional tables can be created as new MIPs are born.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l21 level1 lfo3;
+     tab-stops:list .5in'>For metadata, different MIPs may have different
+     requirements, but these are accommodated by CMOR, within the constraints
+     of the CF convention and as specified in the MIP tables.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l21 level1 lfo3;
+     tab-stops:list .5in'><span style='background:silver;mso-highlight:silver'>CMOR
+     can rely on NetCDF4 (see </span><a
+     href="http://www.unidata.ucar.edu/software/netcdf"><span style='background:
+     silver;mso-highlight:silver'>http://www.unidata.ucar.edu/software/netcdf</span></a><span
+     style='background:silver;mso-highlight:silver'> ) to write the output files
+     and can take advantage of its compression and chunking capabilities. In
+     that case, compression is controlled with the MIP tables using the
+     shuffle, deflate and deflate_level attributes, default values are
+     respectively 1, 1 and 6. It is worth noting that even when using NetCDF4,
+     CMOR2 still produces NETCDF_CLASSIC formatted output. This allows the file
+     generated to be readable by any application that can read NetCDF3 provided
+     they are re-linked against NetCDF4. <span style="mso-spacerun:
+     yes"> </span>When using the NetCDF4 library it is also still possible
+     to write files that can be read through the NetCDF3 library by adding “_3”
+     to the appropriate cmor_setup argument (see below). Either way, CMOR2
+     output NetCDF3 files by default.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l21 level1 lfo3;
+     tab-stops:list .5in'><span style='background:silver;mso-highlight:silver'>CMOR
+     also must be linked against the udunits2 library (see<span
+     class=MsoHyperlink> </span></span><a
+     href="http://my.unidata.ucar.edu/content/%20software/udunits/"><span
+     style='background:silver;mso-highlight:silver'>http://my.unidata.ucar.edu/content/
+     software/udunits/</span></a><span style='background:silver;mso-highlight:
+     silver'>), which enables CMOR to check that the units attribute is correct<a
+     style='mso-footnote-id:ftn' href="#_ftn6" name="_ftnref" title=""><span
+     class=MsoFootnoteReference><span style='mso-special-character:footnote'><![if !supportFootnotes]>[6]<![endif]></span></span></a>.
+     Finally CMOR2 must also be linked against the uuid library (see </span><a
+     href="http://www.ossp.org/pkg/lib/uuid"><span style='background:silver;
+     mso-highlight:silver'>http://www.ossp.org/pkg/lib/uuid</span></a><span
+     style='background:silver;mso-highlight:silver'>) in order to produce a
+     unique tracking number for each file</span>.<span style='background:silver;
+     mso-highlight:silver'> <span style="mso-spacerun: yes"> </span><span
+     style="mso-spacerun: yes"> </span><o:p></o:p></span></li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>Although the CMOR output adheres
+to a fairly rigid structure, there is considerable flexibility allowed in the
+design of codes that write data through the CMOR functions.<span
+style="mso-spacerun: yes">  </span>Depending on how the source data are
+stored, one might want to structure a code to read and rewrite the data through
+CMOR in several different ways.<span style="mso-spacerun: yes"> 
+</span>Consider, for example, a case where data are originally stored in
+"history" files that contain many different fields, but a single time
+sample.<span style="mso-spacerun: yes">   </span>If one were to
+process several different fields through CMOR and one wanted to include many
+time samples per file, then it would usually be more efficient to read all the
+fields from the single input file at the same time, and then distribute them to
+the appropriate CMOR output files, rather than to process all the time-samples
+for a single field and then move on to the next field.<span
+style="mso-spacerun: yes">  </span>If, however, the original data were
+stored already by field (i.e., one variable per file), then it would make more
+sense to simply loop through the fields, one at a time.<span
+style="mso-spacerun: yes">  </span>The user is free to structure the
+conversion program in either of these ways (among others).</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>Converting data with CMOR
+typically involves the following steps (with the CMOR function names given in
+parentheses):</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'>Initialize CMOR and specify where output will be
+     written and how error messages will be handled (cmor_setup).</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'>Provide information directing where output should be
+     placed and identifying the data source, project name, experiment, etc.
+     (cmor_dataset).</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'><span style='background:silver;mso-highlight:silver'>Set
+     any additional “dataset” (i.e. global) attributes (cmor_set_cur_dataset
+     function).<span style="mso-spacerun: yes">  </span>Note that for
+     CMIP5 all the required global attributes are normally set by calling other
+     CMOR subroutines, but this subroutine makes it possible for the user to
+     define additional global attributes.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'>Define the axes (i.e., the coordinate values)
+     associated with each of the dimensions of the data to be written and
+     obtain "handles", to be used in the next step, which uniquely
+     identify the axes (cmor_axis).<span style="mso-spacerun: yes"> 
+     </span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'><span style='background:silver;mso-highlight:silver'>In
+     the case of non-Cartesian longitude-latitude grids or for “station data”,
+     define the grid and its mapping parameters (cmor_grid and
+     cmor_set_grid_mapping)<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'>Define the variables to be written by CMOR, indicate
+     which axes are associated with each variable, and obtain
+     "handles", to be used in the next step, which uniquely identify
+     each variable (cmor_variable).<span style="mso-spacerun: yes"> 
+     </span>For each variable defined, this function fills internal table
+     entries containing file attributes passed by the user or obtained from a
+     MIP table, along with coordinate variables and other related information.
+     Thus, nearly all of the file's metadata is collected during this step.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'>Write an array of data that includes one or more time
+     samples for a defined variable (cmor_write).<span style="mso-spacerun:
+     yes">  </span>This step will typically be repeated to output
+     additional variables or to append additional time samples of data.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l13 level1 lfo5;
+     tab-stops:list .5in'>Close one or all files created by CMOR (cmor_close)</li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>There is an additional function
+(cmor_zfactor), which enables one to define metadata associated with
+dimensionless vertical coordinates.</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>CMOR was designed to reduce the
+effort required of those contributing data to various MIPs.<span
+style="mso-spacerun: yes">  </span>An important aim was to minimize any
+transformations that the user would have to perform on their original data
+structures to meet the MIP requirements.<span style="mso-spacerun: yes"> 
+</span>Toward this end, the code allows the following flexibility (with the MIP
+requirements obtained by CMOR from the appropriate MIP table and automatically
+applied):</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l19 level1 lfo14;
+     tab-stops:list .5in'>The input data can be structured with dimensions in
+     any order and with coordinate values either increasing or decreasing
+     monotonically; CMOR will rearrange them to meet the MIP's requirements
+     before writing out the data.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l19 level1 lfo14;
+     tab-stops:list .5in'>The input data and coordinate values can be provided
+     in an array declared to be whatever "type" is convenient for the
+     user (e.g., in the case of coordinate data, the user might pass type
+     “real” values (32-bit floating-point numbers on most platforms) even
+     though the output will be written type double (64-bit IEEE
+     floating-point); CMOR will transform the data to the required type before
+     writing.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l19 level1 lfo14;
+     tab-stops:list .5in'>The input data can be provided in units different
+     from what is required by a MIP.<span style="mso-spacerun: yes"> 
+     </span>If those units can be transformed to the correct units using the
+     udunits (version 2) software (see<span class=MsoHyperlink> </span><a
+     href="http://my.unidata.ucar.edu/content/software/udunits/">http://my.unidata.ucar.edu/content/software/udunits/</a>),
+     then CMOR performs the transformation before writing the data.<span
+     style="mso-spacerun: yes">  </span>Otherwise, CMOR will return an
+     error. <span style='background:silver;mso-highlight:silver'>Time units are
+     handled via the built-in cdtime interface<a style='mso-footnote-id:ftn'
+     href="#_ftn7" name="_ftnref" title=""><span class=MsoFootnoteReference><span
+     style='mso-special-character:footnote'><![if !supportFootnotes]>[7]<![endif]></span></span></a>
+     <o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l19 level1 lfo14;
+     tab-stops:list .5in'>So-called "scalar dimensions" (sometimes
+     referred to as "singleton dimensions") are automatically
+     inserted by CMOR. Thus, for example, the user can provide surface air
+     temperature (at 2 meters) as a function of longitude, latitude, and time,
+     and CMOR adds as a "coordinate" attribute the "height"
+     dimension, consistent with the metadata requirements of CF.<span
+     style="mso-spacerun: yes">  </span>If the model output does not
+     conform to the MIP requirements (e.g., carries temperature at 1.5 m
+     instead of 2 m), then the user can override the MIP table specifications.</li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>The code does not, however,
+include a capability to interpolate data, either in the vertical or
+horizontally.<span style="mso-spacerun: yes">  </span>If a user stores
+data on model levels, but a MIP requests it on standard pressure levels, then
+the user must interpolate before passing the data to CMOR.<span
+style="mso-spacerun: yes">  </span></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'>The output
+resulting from CMOR is "self-describing" and includes metadata
+summarized below, organized by attribute type (global, coordinate, or variable
+attributes) and by its source (specified by the user or in a MIP table, or
+generated by CMOR).</p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><i
+style='mso-bidi-font-style:normal'>Global attributes typically provided by the
+MIP table or generated by CMOR:<o:p></o:p></i></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l23 level1 lfo16;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>title,</span>
+     identification of the project, experiment, and table.</li>
+</ul>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>Conventions,</span>
+     (<span style='background:silver;mso-highlight:silver'>'CF-1.4'</span>)</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>history,</span>
+     any user-provided history along with a "timestamp" generated by
+     CMOR and a statement that the data conform to both the CF standards and
+     those of a particular MIP.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>project_id</span><span
+     style='background:silver;mso-highlight:silver'>, scientific project that inspired
+     this simulation (e.g., CMIP5)<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>table_id</span><span
+     style='background:silver;mso-highlight:silver'>, MIP table used to define
+     variable.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>experiment</span>,
+     a long name title for the experiment.<span style='font-family:"Courier New"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>modeling_</span><span
+     style='background:silver;mso-highlight:silver'>realm(s) to which the
+     variable belongs (e.g., ocean, land, atmosphere, etc.).<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>tracking_id</span><span
+     style='background:silver;mso-highlight:silver'>, <span
+     style="mso-spacerun: yes"> </span>a unique identification string
+     generated by uuid, which is useful at least within the ESG distributed
+     data archive.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>cmor_version</span><span
+     style='background:silver;mso-highlight:silver'>, version of the library
+     used to generate the files.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>frequency, </span><span
+     style='background:silver;mso-highlight:silver'>the approximate
+     time-sampling interval for a time-series of data.</span><span
+     style='font-family:"Courier New";background:silver;mso-highlight:silver'><o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>creation_date, </span><span
+     style='background:silver;mso-highlight:silver'>the date and time (UTZ) that
+     the file was created.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     mso-bidi-font-family:"Courier New";background:silver;mso-highlight:silver'>product,</span><span
+     style='background:silver;mso-highlight:silver'> a descriptive string that
+     distinguishes among various model data products.</span><span
+     style='font-family:"Courier New";mso-bidi-font-family:"Courier New";
+     background:silver;mso-highlight:silver'><o:p></o:p></span></li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><span
+style="mso-spacerun: yes"> </span></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><i
+style='mso-bidi-font-style:normal'>Global attributes typically provided by the
+user in a call to a CMOR function:<o:p></o:p></i></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>institution</span>,
+     identifying the modeling center contributing the output.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>institute_id</span>,
+     a shorter identifying name of the modeling center (which would be
+     appropriate for labeling plots in which results from many models might
+     appear).</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>source</span>,
+     identifying the model version that generated the output.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>contact,</span>
+     providing the name and email of someone responsible for the data</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>model_id</span><span
+     style='background:silver;mso-highlight:silver'>, an acronym that
+     identifies the model used to generate the output.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>experiment_id</span>,
+     a short name for the experiment.<span style='font-family:"Courier New"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>forcing</span><span
+     style='background:silver;mso-highlight:silver'>, a list of the “forcing”
+     agents that could cause the climate to change in the experiment.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>history</span>,
+     providing an "audit trail" for the data, which will be
+     supplemented with CMOR-generated information described above.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>references</span>,
+     typically containing documentation of the model and the model simulation.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>comment</span>,
+     typically including initialization and spin-up information for the
+     simulation.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>realization</span>,
+     an integer distinguishing among simulations that differ only from
+     different equally reasonable initial conditions.<span style="mso-spacerun:
+     yes">  </span>This number should be greater than or equal to 1. <span
+     style='background:silver;mso-highlight:silver'>CMOR will reset this to 0
+     automatically for “fixed” frequency (i.e. time-independent fields)</span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>initialization</span>_<span
+     style='font-family:"Courier New"'>method</span>, an integer distinguishing
+     among simulations that differ only in the <i style='mso-bidi-font-style:
+     normal'>method</i> of initialization.<span style="mso-spacerun:
+     yes">  </span>This number should be greater than or equal to 1.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>physics</span>_<span
+     style='font-family:"Courier New"'>version</span>, an integer indicating
+     which of several closely related physics versions of a model produced the
+     simulation. <span style='font-family:"Courier New"'><o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     background:silver;mso-highlight:silver'>parent_experiment_id, </span><span
+     style='background:silver;mso-highlight:silver'>a string indicating which
+     experiment this branches from. For CMIP5 this should match the short name
+     of the parent experiment id. <o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     mso-bidi-font-family:"Courier New";background:silver;mso-highlight:silver'>branch_time,</span><span
+     style='background:silver;mso-highlight:silver'> time in parent experiment
+     when this simulation started (in the units of the parent experiment). <o:p></o:p></span></li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><span
+style='background:silver;mso-highlight:silver'>Note: additional global
+attributes can be added by the user via the cmor_set_cur_dataset_attribute
+function (see below).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><i
+style='mso-bidi-font-style:normal'>Coordinate attributes typically provided by
+a MIP table or generated by CMOR:<o:p></o:p></i></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo17;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>standard</span>_<span
+     style='font-family:"Courier New"'>name</span>, as defined in the CF
+     standard name table.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo17;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>units</span>,
+     specifying the units for the coordinate variable.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo17;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>axis</span>,
+     indicating whether axis is of type x, y, z, t, or none of these.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo17;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>bounds</span>,
+     (when appropriate) indicating where the cell bounds are stored.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo17;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>positive</span>,
+     (when appropriate) indicating whether a vertical coordinate increases
+     upward or downward.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo17;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>formula</span>_<span
+     style='font-family:"Courier New"'>terms</span>, (when appropriate)
+     providing information needed to transform from a dimensionless vertical
+     coordinate to the actual location (e.g., from sigma-level to pressure).</li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid;tab-stops:
+273.75pt'><i style='mso-bidi-font-style:normal'>Coordinate or grid mapping
+attributes typically provided by the user in a call to a CMOR function:<o:p></o:p></i></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>calendar</span>,
+     (when appropriate) indicating the calendar type assumed by the model.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='background:silver;
+     mso-highlight:silver'>grid_mapping_name and the names of various mapping
+     parameters.<span style="mso-spacerun: yes">  </span>See CF
+     conventions at: (</span><a
+     href="http://cf-pcmdi.llnl.gov/documents/cf-conventions/1.1/cf-conventions.html#grid-mappings-and-projections"><span
+     style='background:silver;mso-highlight:silver'>http://cf-pcmdi.llnl.gov/documents/cf-conventions/1.1/cf-conventions.html#grid-mappings-and-projections</span></a><span
+     style='background:silver;mso-highlight:silver'> )<o:p></o:p></span></li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><i
+style='mso-bidi-font-style:normal'>Variable attributes typically provided by a
+MIP table or generated by CMOR:<o:p></o:p></i></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>standard</span>_<span
+     style='font-family:"Courier New"'>name</span> as defined in the CF
+     standard name table.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>units</span>,
+     specifying the units for the variable.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>long</span>_<span
+     style='font-family:"Courier New"'>name</span>, describing the variable and
+     useful as a title on plots.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>missing</span>_<span
+     style='font-family:"Courier New"'>value and _FillValue</span>, specifying
+     how missing data will be identified.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>cell</span>_<span
+     style='font-family:"Courier New"'>methods</span>, (when appropriate)
+     typically providing information concerning calculation of means or
+     climatologies, which may be supplemented by information provided by the
+     user.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New";
+     mso-bidi-font-family:"Courier New";background:silver;mso-highlight:silver'>cell_measures</span><span
+     style='background:silver;mso-highlight:silver'>, when appropriate,
+     indicates the names of the variables containing cell areas and volumes.<o:p></o:p></span></li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>comment</span>,
+     providing clarifying information concerning the variable (e.g., whether
+     precipitation includes both liquid and solid forms of precipitation).</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>history</span>,
+     indicating what CMOR has done to the user supplied data (e.g.,
+     transforming its units or rearranging its order to be consistent with the
+     MIP requirements)</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>coordinates</span>,
+     (when appropriate) supplying either scalar (singleton) dimension
+     information or the name of the labels containing names of geographical
+     regions.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l17 level1 lfo15;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>associated_files</span>,
+     files that contain metadata that applies to this variable. <span
+     style='background:silver;mso-highlight:silver'>Presently this attribute
+     points to the gridspec file and the files containing cellArea and
+     cellVolume if they’re refered to by the “cell_measures” attribute.<span
+     style="mso-spacerun: yes">  </span>It also includes a URL pointing to
+     the top directory structure where the data will be accessible online.<o:p></o:p></span></li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><i
+style='mso-bidi-font-style:normal'>Variable attributes typically provided by
+the user in a call to a CMOR function:<o:p></o:p></i></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo18;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>original</span>_<span
+     style='font-family:"Courier New"'>name</span>, containing the name of the
+     variable as it is known at the user's home institution.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo18;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>original</span>_<span
+     style='font-family:"Courier New"'>units</span>, the units of the data
+     passed to CMOR.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo18;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>history</span>,
+     (when appropriate) information concerning processing of the variable prior
+     to sending it to CMOR.<span style="mso-spacerun: yes">  </span>(This
+     information may be supplemented by further history information generated
+     by CMOR.)</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo18;
+     tab-stops:list .5in left 273.75pt'><span style='font-family:"Courier New"'>comment</span>,
+     (when appropriate) providing miscellaneous information concerning the
+     variable, which will supplement any comment contained in the MIP table.</li>
+</ul>
+
+<p class=MsoNormal style='margin-left:.25in;text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'>As is evident
+from the above summary of metadata, a substantial fraction of the information
+is defined in the MIP tables, which explains why writing MIP output through
+CMOR is much easier than writing data without the help of the MIP tables.<span
+style="mso-spacerun: yes">   </span>Besides the attribute
+information, the MIP tables also include information that controls the structure
+of the output and allows CMOR to apply some rudimentary quality assurance
+checks.<span style="mso-spacerun: yes">  </span>Among this ancillary
+information in the MIP tables is the following:</p>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The direction each coordinate should be
+     stored when it is output (i.e., either in order of increasing or
+     decreasing values).<span style="mso-spacerun: yes">  </span>The user
+     need not be concerned with this since, if necessary, CMOR will reorder the
+     coordinate values and the data.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The acceptable values for coordinates
+     (e.g., for a pressure coordinate axis, for example, perhaps the WCRP
+     standard pressure levels).</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The acceptable values for various
+     arguments passed to CMOR functions (e.g., acceptable calendars, experiment
+     i.d.'s, etc.)</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The "type" of each output
+     array (whether real, double precision, or integer).<span
+     style="mso-spacerun: yes">  </span>The user need not be concerned
+     with this since, if necessary, CMOR will convert the data to the specified
+     type.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The order of the dimensions for output
+     arrays. The user need not be concerned with this since, if necessary, CMOR
+     will reorder the data consistent with the specified dimension order. </li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The normally applied values for
+     "scalar dimensions" (i.e., "singleton dimensions").</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The range of acceptable values for
+     output arrays.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The acceptable range for the spatial
+     mean of the absolute value of all elements in output arrays.</li>
+ <li class=MsoNormal style='text-align:justify;mso-list:l18 level1 lfo20;
+     tab-stops:list .5in left 273.75pt'>The minimal global attributes required.</li>
+</ul>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<h1><a name="_Toc129421996"></a><a name="_Toc134007295"><span style='mso-bookmark:
+_Toc129421996'>Acknowledgements</span></a></h1>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='tab-stops:273.75pt'>Several individuals have
+supported the development of the CMOR1 software and provided encouragement,
+including Dean Williams, Dave Bader, and Peter Gleckler.<span
+style="mso-spacerun: yes">  </span>Jonathan Gregory, Jim Boyle, and Bob
+Drach all provided valuable suggestions on how to simplify or in other ways
+improve the design of this software, and we particularly appreciate the time
+they spent reading and thinking about this problem.<span style="mso-spacerun:
+yes">  </span>Jim Boyle additionally helped in a number of other ways,
+including porting CMOR to various platforms.<span style="mso-spacerun:
+yes">  </span>Brian Eaton provided his usual careful and thoughtful
+responses to questions about CF compliance. Finally, we appreciate the
+encouragement expressed by the WGCM for developing CMOR.</p>
+
+<p class=MsoNormal style='tab-stops:273.75pt'><o:p> </o:p></p>
+
+<p class=MsoNormal style='tab-stops:273.75pt'>The complete rewrite of CMOR,
+along with the new capabilities added to version 2, was implemented by Charles
+Doutriaux.<span style="mso-spacerun: yes">  </span>We thank Dean Williams,
+Bob Drach, Renata McCoy, Jim Boyle, and the British Atmospheric Data Center
+(BADC). We also thank every one of the “early” adopters of CMOR2 who patiently
+helped us test and debug CMOR2. In particular we would like to thank Jamie
+Kettleborough from the UK Metoffice, Stephen Pascoe of the British Atmospheric
+Data Centre, Joerg Wegner of Zentrum für Marine und Atmosphärische
+Wissenschaften, Yana Malysheva of the Geophysical Fluid Dynamics Laboratory and
+Alejandro Bodas-Salcedo of UK Metoffice for the many lines of codes, bug fixes,
+and sample tests they sent our way.<b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'> </span><o:p></o:p></b></p>
+
+<b><span style='font-size:16.0pt;font-family:Arial;mso-fareast-font-family:
+"Times New Roman";mso-bidi-font-family:Arial;mso-font-kerning:16.0pt;
+mso-ansi-language:EN-US;mso-fareast-language:EN-US'><br clear=ALL
+style='page-break-before:always'>
+</span></b>
+
+<h1><a name="_Toc129421997"></a><a name="_Toc134007296"><span style='mso-bookmark:
+_Toc129421997'>Description of CMOR Functions</span></a></h1>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<h2><a name="_Toc129421998"></a><a name="_Toc134007297"><span style='mso-bookmark:
+_Toc129421998'>Preliminary notes:</span></a></h2>
+
+<p class=MsoNormal style='text-align:justify'><span style="mso-spacerun:
+yes">  </span>In the following, all arguments should be passed using
+keywords (to improve readability and flexibility in ordering the
+arguments).<span style="mso-spacerun: yes">  </span>Those arguments
+appearing below that are followed by an equal sign may be optional and, if not
+passed by the user, are assigned the default value that follows the equal
+sign.<span style="mso-spacerun: yes">  </span>The information in a
+MIP-specific input table determines whether or not an argument shown in
+brackets is optional or required, and pro vides MIP-specific default values for
+some parameters.<span style="mso-spacerun: yes">  </span>All arguments not
+in brackets and not followed by an equal sign are always required. </p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>Three versions of each function
+are shown below.<span style="mso-spacerun: yes">  </span>The first one is
+for <b style='mso-bidi-font-weight:normal'><span style='color:#00B050'>Fortran</span></b><span
+style='color:#00B050'> (green text)</span><b style='mso-bidi-font-weight:normal'>
+</b>the second for <b style='mso-bidi-font-weight:normal'><span
+style='color:blue'>C</span></b><span style='color:blue'> (blue text)</span>, and
+the third for <b style='mso-bidi-font-weight:normal'><span style='color:#FF660A'>Python</span></b><span
+style='color:#FF660A'> </span><span style='color:#FF6600'>(orange text).<span
+style="mso-spacerun: yes">  </span><span style="mso-spacerun:
+yes"> </span></span>In the following, text that applies to only one of the
+coding languages appears in the appropriate color.</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'>Some of the arguments passed to
+CMOR (e.g., names of variables and axes are only unambiguously defined in the
+context of a specific CMOR table, and in the Fortran version of the functions
+this is specified by one of the function arguments, whereas in the C and Python
+versions it is specified through a call to cmor_load_table and cmor_set_table.</p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'>All functions are type
+“integer”.<span style="mso-spacerun: yes">  </span>If a function results
+in an error,<span style='color:#FF6600'> an “exception” will be raised in the
+Python version (otherwise None will be returned), </span>and in either the
+Fortran or C versions, the error will be indicated by the integer returned by
+the function itself.<span style="mso-spacerun: yes">  </span><span
+style='color:blue'>In C an integer other than 0 will be returned,</span><span
+style='color:#FF6600'> </span><span style='color:#00B050'>and in Fortran errors
+will result in a negative integer (except in the case of cmor_grid, which will
+return a positive integer).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'>If no error is encountered, some
+functions will return information needed by the user in subsequent calls to
+CMOR.<span style="mso-spacerun: yes">  </span>In almost all cases this
+information is indicated by the value of a single integer that in Fortran and
+Python is returned as the value of the function itself, whereas in C it is
+returned as an output argument).<span style="mso-spacerun: yes"> 
+</span>There are two cases in the Fortran version of CMOR, however, when a
+string argument may be set by CMOR (cmor_close and
+cmor_create_output_path).<span style="mso-spacerun: yes">  </span>These are
+the only cases when the value of any of the Fortran function’s arguments might
+be modified by CMOR.<span style="mso-spacerun: yes">    
+</span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<h2><a name="_Toc129421999"></a><a name="_Toc134007298"><span style='mso-bookmark:
+_Toc129421999'>Setting up CMOR</span></a></h2>
+
+<h3><a name="_Toc129422000"></a><a name="_Toc134007299"><span style='mso-bookmark:
+_Toc129422000'>Initialize CMOR: cmor_setup</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050'>Fortran: error_flag =
+cmor_setup(inpath='./', netcdf_file_action=CMOR_PRESERVE,
+set_verbosity=CMOR_NORMAL, exit_control=CMOR_NORMAL, logfile,
+create_subdirectories)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:blue'>C: error_flag = cmor_setup(char *inpath, int
+*netcdf_file_action, int *set_verbosity, int *exit_control, char*logfile, int
+*create_subdirectories)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#FF6600'>Python: setup(inpath='.',
+netcdf_file_action=CMOR_PRESERVE, set_verbosity=CMOR_NORMAL,
+exit_control=CMOR_NORMAL, logfile=None, create_subdirectories=1)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>: Initialize CMOR, specify
+path to MIP table(s) that will be read by CMOR, specify whether existing output
+files will be overwritten, and specify how error messages will be handled</p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Arguments</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[inpath] = a character string specifying the path to the directory where
+the needed MIP-specific tables reside.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[netcdf_file_action] = controls handling of existing netCDF files.<span
+style="mso-spacerun: yes">  </span>If the value passed is CMOR_REPLACE, a
+new file will be created; any existing file with the same name as the one CMOR
+is trying to create will be overwritten.<span style="mso-spacerun: yes"> 
+</span>If the value is CMOR_APPEND, an existing file will be appended; if the
+file does not exist, it will be created.<span style="mso-spacerun: yes"> 
+</span>If the value is CMOR_PRESERVE, a new file will be created unless a file
+by the same name already exists, in which case the program will error exit.<a
+style='mso-footnote-id:ftn' href="#_ftn8" name="_ftnref" title=""><span
+class=MsoFootnoteReference><span style='color:#00B050'><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[8]<![endif]></span></span></span></a> <span
+style='background:silver;mso-highlight:silver'>To generate a NetCDF file in the
+“CLASSIC” NetCDF3 format, a “_3” should be appended to the above parameters
+(e.g., CMOR_APPEND would become CMOR_APPEND_3). To generate a NetCDF file in
+the “CLASSIC” NetCDF4 format, a “_4” should be appended to the above parameters
+(e.g., CMOR_APPEND would become CMOR_APPEND_4), this allows the user to take
+advantage of NetCDF4 compression and chunking capapbilities. The default values
+(no underscore) are aliased to the _3 values.</span> </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[set_verbosity] controls how informational messages and error messages
+generated by CMOR are handled.<span style="mso-spacerun: yes">  </span>If
+set_verbosity=CMOR_NORMAL, errors and warnings will be sent to the standard error
+device (typically the user's screen). If verbosity=CMOR_QUIET, then only error
+messages will be sent (and warnings will be suppressed).<span
+style="mso-spacerun: yes">  </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-indent:-.5in'>[exit_control]
+determines if errors will trigger program to exit: CMOR_EXIT_ON_MAJOR = stop
+only on critical error; CMOR_NORMAL = stop only if severe errors;
+CMOR_EXIT_ON_WARNING = stop even after minor errors detected.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-indent:-.5in'><span
+style='background:silver;mso-highlight:silver'>[logfile] where CMOR will write
+its messages -- default is “standard error” (stderr).</span><span
+style="mso-spacerun: yes">  </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-indent:-.5in'><span
+style='background:silver;mso-highlight:silver'>[create_subdirectories] do we
+want to create the correct path subdirectory structure or simply dump the files
+wherever cmor_dataset will point to.</span><span style="mso-spacerun:
+yes">  </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'>\Returns upon success</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050'>Fortran: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#FF6600'>Python: None <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<h2><a name="_Toc129422001"></a><a name="_Toc134007300"><span style='mso-bookmark:
+_Toc129422001'>Dealing with Dataset</span></a></h2>
+
+<h3><a name="_Toc129422002"></a><a name="_Toc134007301"><span style='mso-bookmark:
+_Toc129422002'>Define a Dataset: cmor_dataset</span></a></h3>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050'>Fortran: error_flag = cmor_dataset(outpath,
+experiment_id, institution, source, calendar, [realization=1], [contact],
+[history], [comment], [references], [leap_year], [leap_month], [month_lengths],
+[model_id], [forcing],<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;page-break-after:avoid'><span
+style='color:#00B050'>[initialization_method], [physics_version],
+[institute_id], [parent_experiment_id], [branch_time])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:blue'>C: error_flag = cmor_dataset(char *outpath,
+char *experiment_id, char *institution, char *source,<span style="mso-spacerun:
+yes">   </span>char *calendar, int realization, char *contact,<span
+style="mso-spacerun: yes">  </span>char *history,<span
+style="mso-spacerun: yes">  </span>char *comment, char *references, int
+leap_year, int leap_month, int month_lengths[12], char *model_id, char *forcing,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;page-break-after:avoid'><span
+style='color:blue'>int initialization_method, int physics_version, char
+*institute_id, char *parent_experiment_id, double *branch_time)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#FF6600'>Python: dataset(experiment_id, institution,
+source, calendar, outpath='.', realization=1, contact="",
+history="", comment="", references="",
+leap_year=None, leap_month=None, month_lengths=None, model_id=””, forcing=””,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;page-break-after:avoid'><span
+style='color:#FF6600'>initialization_method=None, physics_version=None, institute_id=””,
+parent_experiment_id=None, branch_time=0.)</span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>: This function provides
+information to CMOR that is common to all output files that will be
+written.<span style="mso-spacerun: yes">  </span>The "dataset"
+defined by this function refers to some or all of the output from a single
+model simulation (i.e., output from a single realization of a single experiment
+from a single model).<span style="mso-spacerun: yes">  </span>Only one
+dataset can be defined at any time, but the dataset can be closed (by calling
+cmor_close()), and then another dataset can be defined by calling cmor_dataset.
+<span style='background:silver;mso-highlight:silver'>Note that after a new
+dataset is defined, all axes and variables must be defined; axes and variables
+defined earlier are not associated with the new dataset. </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'>Arguments</i>:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>outpath = path where all output files in this dataset will be written
+(including both model output netCDF files and log and error files).<span
+style="mso-spacerun: yes">  </span>The log and error files will be placed
+in this directory, but the model output files will be placed in
+subdirectories.<span style="mso-spacerun: yes">  </span>By default the
+subdirectory tree will be generated by CMOR, if necessary, consistent with the
+following <span style='background:silver;mso-highlight:silver'>structure:
+<activity>/ <product>/<institute_id>/<model_id>/<experiment>/<frequency>/
+<modeling_realm>/<variable_name>/<ensemble member> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><span
+style='mso-tab-count:1'>            </span>Notes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify;text-indent:
+-.25in;mso-list:l2 level1 lfo37'><![if !supportLists]><span style='background:
+silver;mso-highlight:silver'><span style='mso-list:Ignore'>1)<span
+style='font:7.0pt "Times New Roman"'>    </span></span></span><![endif]><span
+style='background:silver;mso-highlight:silver'>CMOR will check that the
+directory does exist, that it is a directory and that you do have read/write
+permissions.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify;text-indent:
+-.25in;mso-list:l2 level1 lfo37'><![if !supportLists]><span style='mso-list:
+Ignore'>2)<span style='font:7.0pt "Times New Roman"'>    </span></span><![endif]><span
+style='background:silver;mso-highlight:silver'>One can turn off the creation of
+the subdirectories via the keyword “create_subdirectories” in the cmor_setup
+call.</span> </p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-align:justify;text-indent:
+-.25in;mso-list:l2 level1 lfo37'><![if !supportLists]><span style='mso-list:
+Ignore'>3)<span style='font:7.0pt "Times New Roman"'>    </span></span><![endif]><span
+style='background:silver;mso-highlight:silver'>The necessary information is
+sent to CMOR as arguments of either cmor_dataset or cmor_variable Other
+attributes can also be set via the command: cmor_set_cur_dataset_attribute.</span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:2.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>frequency</span></i><span style='background:silver;
+mso-highlight:silver'> is determined from the “approximate_interval” defined in
+the MIP-specific table where the variable that will be written is found.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:2.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>modeling_realm</span></i><span style='background:silver;
+mso-highlight:silver'> is read from the MIP-specific table where the variable
+that will be written is found, If there is no modeling_realm associated
+specifically with the variable, the default value defined for the table itself
+will be used. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>experiment_id <span style="mso-spacerun: yes"> </span>= character
+string identifying the experiment within the project that generated the data
+(e.g., 'control', 'perturbation', etc.)<span style="mso-spacerun: yes"> 
+</span>See individual MIP home pages for the official experiment designations
+(or see the MIP-table list of "expt_id_ok" acceptable i.d.'s).<span
+style="mso-spacerun: yes">  </span>Either the short “experiment i.d.” or
+the longer “experiment name” may be passed to CMOR.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>institution = character string identifying the institution that
+generated the data [e.g., 'NCAR (National Center for Atmospheric Research,
+Boulder, CO, USA)']</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>source = character string <span style='background:silver;mso-highlight:
+silver'>fully</span> identifying the model <span style='background:silver;
+mso-highlight:silver'>and</span> version <span style='background:silver;
+mso-highlight:silver'>used to generate the output.<span style="mso-spacerun:
+yes">  </span>The first portion of the string should be a copy of the
+global attribute “model_id”.</span><span style="mso-spacerun: yes"> 
+</span>Additionally, this attribute must include the year (i.e., model vintage)
+when this model version was first used in a scientific application.<span
+style="mso-spacerun: yes">  </span>Finally, it should include information
+concerning the component models.<span style="mso-spacerun: yes"> 
+</span>The following template should be <span style='background:silver;
+mso-highlight:silver'>followed</span> in constructing this string: '<i
+style='mso-bidi-font-style:normal'>[model<span style='background:silver;
+mso-highlight:silver'>_id</span>] [year] </i>atmosphere: <i style='mso-bidi-font-style:
+normal'>[model_name] </i>(<i style='mso-bidi-font-style:normal'>[technical_name],
+[resolution_and_levels]</i>); ocean: <i style='mso-bidi-font-style:normal'>[model_name]
+</i>(<i style='mso-bidi-font-style:normal'>[technical_name],
+[resolution_and_levels]</i>); sea ice: <i style='mso-bidi-font-style:normal'>[model_name]
+</i>(<i style='mso-bidi-font-style:normal'>[technical_name])</i>; land: <i
+style='mso-bidi-font-style:normal'>[model_name] </i>(<i style='mso-bidi-font-style:
+normal'>[technical_name])'</i>' <span style='background:silver;mso-highlight:
+silver'>For some models, it may not make much sense to include all these
+components, and nothing following “[year]” is absolutely mandatory.</span> As
+an example, "source" might contain the string: 'CCSM2 2002
+atmosphere: CAM2 (cam2_0_brnchT_itea_2, T42L26); ocean:<span
+style="mso-spacerun: yes">  </span>POP (pop2_0_ver_1.4.3, 2x3L15); sea
+ice: CSIM4; land: CLM2.0'.<span style="mso-spacerun: yes">  </span>For
+some MIP's it might be appropriate to list only a single component, in which
+case the descriptor (e.g., 'atmosphere') may be omitted along with the other
+model components (e.g., 'CAM2 2002 (cam2_0_brnchT_itea_2, T42L26)'.<span
+style="mso-spacerun: yes">  </span>Additional explanatory information may
+follow the required information.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>calendar = CF-compliant calendar specification (e.g., ‘gregorian’,
+'noleap', etc.)<span style="mso-spacerun: yes">  </span>This argument must
+be included even in the case of a non-standard calendar, in which case it must
+not be given one of the calendars currently defined by CF ('gregorian', 'standard',
+'proleptic_gregorian', 'noleap', '365_day', '360_day', 'julian', and 'none'),
+and it must not be completely blank or a null string.<span style="mso-spacerun:
+yes">  </span>It would be acceptable, for example, to assign
+'non_standard' to this argument in the case of a non-standard calendar. </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[realization] = an integer distinguishing among members of an ensemble
+of simulations (e.g., 1, 2, 3, etc.).<span style="mso-spacerun: yes"> 
+</span>If only a single simulation was performed, then this argument should be
+given the value 1 (which is also the default value). <span style='background:
+silver;mso-highlight:silver'>CMOR will reset this to 0 automatically for
+“fixed” frequency (i.e. time-independent fields)</span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[contact] = name and contact information (e.g., email, address, phone
+number) of person who should be contacted for more information about the data.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[history] = audit trail for modifications to the original data, each
+modification typically preceded by a "timestamp".<span
+style="mso-spacerun: yes">   </span>The "history" attribute
+provided here will be a global one and should not depend on which variable is
+contained in the file.<span style="mso-spacerun: yes">  </span>A
+variable-specific "history" can also be included in calling
+cmor_variable, described below.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[comment] = miscellaneous information about the data or methods used to
+produce it.<span style="mso-spacerun: yes">  </span>Each MIP may encourage
+the user to provide different information here.<span style="mso-spacerun:
+yes">  </span>For example, the user may be asked to include a description
+of how the initial conditions for a simulation were specified and how the model
+was spun-up (including the length of the spin-up period).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[references] = Published or web-based references that describe the data
+or methods used to produce it.<span style="mso-spacerun: yes"> 
+</span>Typically, the user should provide references describing the model
+formulation here.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[leap_year] = for non-standard calendars (otherwise omit), an integer,
+indicating an example of a leap year.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[leap_month] = for non-standard calendars (otherwise omit), an integer
+in the range 1-12, specifying which month is lengthened by a day in leap years
+(1=January).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[month_lengths] = for non-standard calendars (otherwise omit), an
+integer vector of size 12, specifying the number of days in the months from
+January through December (in a non-leap year).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[model_id] = a
+string containing an acronym that identifies the model used to generate the
+output<a name="_Ref102799275">.</a><a style='mso-footnote-id:ftn' href="#_ftn9"
+name="_ftnref" title=""><span style='mso-bookmark:_Ref102799275'><span
+class=MsoFootnoteReference><span style='mso-special-character:footnote'><![if !supportFootnotes]>[9]<![endif]></span></span></span></a><span
+style='mso-bookmark:_Ref102799275'></span> For CMIP5, the model_id should be
+officially approved by the CMIP Panel (through PCMDI).<span
+style="mso-spacerun: yes">  </span>It should be as short as possible, so
+that it can be used, for example, in labeling curves on multi-model plots.<span
+style="mso-spacerun: yes">  </span>For examples of model_ids from CMIP3,
+see
+http://www-pcmdi.llnl.gov/ipcc/model_documentation/ipcc_model_documentation.php.<span
+style="mso-spacerun: yes">  </span>The acronym may include the acronym of
+the modeling center and the model name/version separated by a hyphen (e.g., “</span><span
+style='font-size:10.0pt;font-family:Arial;mso-bidi-font-family:Arial;
+background:silver;mso-highlight:silver'>IPSL-CM4”), but it may be o.k. to omit
+the modeling center</span><span style='background:silver;mso-highlight:silver'>.<span
+style="mso-spacerun: yes">  </span>Please note that you might in the
+future want to submit results from a successor to the present model, so if
+appropriate, you may want to indicate a model version, but please keep it
+simple e.g., CCSM4, not CCSM4.1.2.<span style="mso-spacerun: yes"> 
+</span>Full version information will appear in the “source” global attribute
+described above.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[forcing] = a
+string containing a list of the “forcing” agents that could cause the climate
+to change in the experiment.<sup>9</sup><span style="mso-spacerun: yes"> 
+</span>The forcing should be expressed as a comma separated list of identifying
+strings that are part of the so-called DRS controlled vocabulary described in
+Appendix 1.2 of http://cmip-pcmdi.llnl.gov/cmip5/docs/cmip5_data_reference_syntax.pdf.<span
+style="mso-spacerun: yes">  </span>Within and/or following this
+machine-interpretable list may be text enclosed in parentheses providing
+further information. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[initialization_method]
+= an integer referring to the initialization method used. In C passing 0 means
+omitting it.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[physics_version] =
+an integer referring to the physics used by the model, in C passing 0 means
+omitting it<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
+style='background:silver;mso-highlight:silver'>[institute_id] = a short acronym
+describing “institution”</span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[parent_experiment_id]
+= experiment_id indicating which experiment this branches from. For CMIP5 this
+should match the short name of the parent experiment id. Please pass “N/A” if
+Not Applicable.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[branch_time] =
+time in parent experiment when this simulation started (in the units of the
+parent experiment). Pass 0 if Not Applicable. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'>Returns upon success</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050'>Fortran: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#FF6600'>Python: None <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#99CC00'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422003"></a><a name="_Toc134007302"><span style='mso-bookmark:
+_Toc129422003'>Define a Dataset Attribute: cmor_set_cur_dataset_attribute</span></a></h3>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran:
+error_flag = cmor_set_cur_dataset_attribute(name,value)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_set_cur_dataset_attribute(char *name, char *value, int optional) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: set_cur_dataset_attribute(name,value)</span><span
+style='background:silver;mso-highlight:silver'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: Associate a global attribute with the current dataset.<span
+style="mso-spacerun: yes">  </span>In CMIP5, this function can be called to
+set, for example, “institute_id”, “initialization” and “physics”. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='background:silver;
+mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>name = name of the global
+attribute to set.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>value = character
+string containing the value of this attribute.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>optional = an
+argument that is ignored.<span style="mso-spacerun: yes"> 
+</span>(Internally, CMOR calls this function and needs this argument.)<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='color:blue;background:silver;mso-highlight:
+silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Returns upon success</span></i><span style='background:silver;
+mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: None</span><span
+style='color:#FF6600'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422004"></a><a name="_Toc134007303"><span style='mso-bookmark:
+_Toc129422004'>Retrieve<span style="mso-spacerun: yes">  </span>a Dataset
+Attribute: cmor_get_cur_dataset_attribute</span></a></h3>
+
+<p class=MsoNormal><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran:
+error_flag = cmor_get_cur_dataset_attribute(name,result)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_get_cur_dataset_attribute(char *name, char *result) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: result = get_cur_dataset_attribute(name)</span><span
+style='background:silver;mso-highlight:silver'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: Retrieves a global attribute associated with the current dataset.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='background:silver;
+mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>name = name of the
+global attribute to retrieve.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>result = string<span
+style="mso-spacerun: yes">  </span>(or pointer to a string), which is
+returned by the function and contains the retrieved global attribute (not for
+Python).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Returns upon success</span></i><span style='background:silver;
+mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: None</span><span
+style='color:#FF6600'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422005"></a><a name="_Toc134007304"><span style='mso-bookmark:
+_Toc129422005'>Inquire whether a Dataset Attribute Exists:
+cmor_has_cur_dataset_attribute</span></a></h3>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#FF6600;background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran:
+error_flag = cmor_has_cur_dataset_attribute(name)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_has_cur_dataset_attribute(char *name) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: error_flag
+= has_cur_dataset_attribute(name)</span><span style='background:silver;
+mso-highlight:silver'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: Determines whether a global attribute is associated with the current
+dataset.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='background:silver;
+mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>name = name of the
+global attribute of interest.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Returns</span></i><span style='background:silver;
+mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>a negative integer
+if an error is encountered; otherwise returns 0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>0 upon success<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600;background:silver;mso-highlight:silver'><span
+style='mso-tab-count:1'>            </span>True
+if the attribute exists, False otherwise.</span><span style='color:#FF6600'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#99CC00'><o:p> </o:p></span></p>
+
+<h2><a name="_Toc129422006"></a><a name="_Toc134007305"><span style='mso-bookmark:
+_Toc129422006'>Dealing with tables</span></a></h2>
+
+<h3><a name="_Toc129422007"></a><a name="_Toc134007306"><span style='mso-bookmark:
+_Toc129422007'>Loading a Table in Memory from File:cmor_load_table</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><b style='mso-bidi-font-weight:normal'><u><span style='color:#99CC00'><o:p><span
+ style='text-decoration:none'> </span></o:p></span></u></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050'>Fortran: table_id = cmor_load_table(table)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue'>C: error_flag = cmor_load_table(char *table, int *table_id)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600'>Python: table_id = load_table(table)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>: Loads a table to use later
+when defining CMOR components. CMOR will look first at the path as specified by
+the argument passed to this function, and if it doesn’t find a file there it
+will prepend the outpath defined in calling cmor_dataset. </p>
+
+<h3><a name="_Toc129422008"></a><a name="_Toc134007307"><span style='mso-bookmark:
+_Toc129422008'>Loading a Table from Memory:cmor_set_table</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050'>Fortran: cmor_set_table(table_id)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue'>C: error_flag = cmor_set_table(int table_id)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600'>Python: table_id = set_table(table_id)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>: Sets the table referred to
+by table_id as the table to obtain needed information when defining CMOR
+components (variables, axes, grids, etc…). </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><o:p> </o:p></p>
+
+<h2><a name="_Toc129422009"></a><a name="_Toc134007308"><span style='mso-bookmark:
+_Toc129422009'>Dealing with Axes</span></a></h2>
+
+<p class=MsoNormal><o:p> </o:p></p>
+
+<h3><a name="_Toc129422010"></a><a name="_Toc134007309"><span style='mso-bookmark:
+_Toc129422010'>Define an Axis: cmor_axis</span></a></h3>
+
+<p class=MsoNormal><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050'>Fortran: axis_id = cmor_axis([table], table_entry, units,
+[length], [coord_vals], [cell_bounds], [interval])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue'>C: error_flag = cmor_axis(int *axis_id, char *table_entry,
+char *units, int length, void *coord_vals, char type, void *cell_bounds, int
+cell_bounds_ndim, char *interval)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600'>Python: axis_id = axis(table_entry, units=None,
+length=None, coord_vals=None, cell_bounds=None, interval=None)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>: <span style="mso-spacerun:
+yes"> </span>Define an axis and pass the coordinate values associated with
+one of the dimensions of the data to be written. This function returns a
+"handle" (axis_id) that uniquely identifies the axis to be
+written.<span style="mso-spacerun: yes">  </span>The axis_id will
+subsequently be passed by the user to other CMOR functions.<span
+style="mso-spacerun: yes">  </span>The cmor_axis function will typically
+be repeatedly invoked to define all axes.<span style="mso-spacerun: yes"> 
+</span>The axis specified by the table_entry argument must be found in the
+currently “set” CMOR table, as specified by the cmor_load_table and
+cmor_set_table functions, <span style='color:#00B050'>or as an option, it can
+be provided in the Fortran version (for backward compatibility) by the now
+deprecated “table” keyword argument. </span><span style="mso-spacerun:
+yes"> </span>There normally is no need to call this function in the case
+of a singleton (scalar) dimension unless the MIP recommended (or required)
+coordinate value (or cell_bounds) are inconsistent with what the user can
+supply, or unless the user wants to define the "interval" attribute. </p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Arguments</i>:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#00B050'>[table] = character string containing the
+filename of the MIP-specific table where the axis defined here appears (e.g.,
+‘CMIP5_table_Amon’, 'IPCC_table_A1', 'AMIP_table_1a', 'AMIP_table_2',
+'CMIP_table_2', etc.).<span style="mso-spacerun: yes">   </span>In
+CMOR2 this is an optional argument and is deprecated because the table can be
+specified through the cmor_load_table and cmor_set_table functions.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>axis_id = the “handle”: a positive integer
+returned by CMOR, which uniquely identifies the axis stored in this call to
+cmor_axis and subsequently can be used in calls to cmor_write. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>table_entry = name of the axis (as it appears in the MIP table) that
+will be defined by this function.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>units = units associated with the coordinates passed in coord_vals and
+cell_bounds.<span style="mso-spacerun: yes">  </span>(These are the units
+of the user's coordinate values, which, if CMOR is built with udunits (as is
+required in version 2), may differ from the units of the coordinates written to
+the netCDF file by CMOR.<span style="mso-spacerun: yes">  </span>For
+non-standard calendars (e.g., models with no leap year), conversion of time
+values can be made only if CMOR is built with CDMS.) These units must be
+recognized by udunits or must be identical to the units specified in the MIP
+table.<span style="mso-spacerun: yes">  </span>In the case of a
+dimensionless vertical coordinate or in the case of a non-numerical axis (like
+geographical region), either set units='none', or, optionally, set units='1'.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[length] = integer specifying the number of elements that CMOR should
+extract from the coord_vals array (normally length will be the size of the
+array itself). For a simple “index axis” (i.e., an axis without coordinate
+values), this specifies the length of the dimension.<span style="mso-spacerun:
+yes">  </span>In the Fortran and Python versions of the function, this
+argument is not always required (except in the case of a simple index axis); if
+omitted “length” will be the size of the coord_vals array, </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[coord_vals] = 1-d array (single precision float, double precision
+float, or, for labels, character strings) containing coordinate values, ordered
+consistently with the data array that will be passed by the user to CMOR
+through function cmor_write (see documentation below).<span
+style="mso-spacerun: yes">  </span>This argument is required except if: 1)
+the axis is a simple “index axis” (i.e., an axis without coordinate values), or
+2) for a time coordinate, the user intends to pass the coordinate values when
+the cmor_write function is called.<span style="mso-spacerun: yes"> 
+</span>Note that the coordinate values must be ordered monotonically, so, for
+example, in the case of longitudes that might have the values, 0., 10., 20, ...
+170., 180., 190., 200.,<span style="mso-spacerun: yes">  </span>... 340.,
+350., passing the (equivalent) values, 0., 10., 20, ... 170., 180., -170.,
+-160., ... -20., -10. is forbidden.<span style="mso-spacerun: yes"> 
+</span>In the case of time-coordinate values, if cell bounds are also passed,
+then CMOR will first check that each coordinate value is not outside its
+associated cell bounds; subsequently, however, the user-defined coordinate
+value will be replaced by the mid-point of the interval defined by its bounds,
+and it is this value that will be written to the netCDF file. <span
+style='color:blue'>In the case of character string coord_vals there are no
+cell_bounds, but for the C version of the function, the argument
+cell_bounds_ndim is used to specify the length of the strings in the coord_vals
+array (i.e., the array will be dimensioned [length][cell_bounds_ndim]). <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>type = type of the coord_vals/bnds passed, which
+can be ‘d’ (double), ‘f’ (float), ‘l’ (long) or ‘i’ (int).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[cell_bounds] = 1-d or 2-d array (of the same type as coord_vals)
+containing cell bounds, which should be in the same units as coord_vals
+(specified in the "units" argument above) and should be ordered in
+the same way as coord_vals.<span style="mso-spacerun: yes">  </span>In the
+case of a 1-d array, the size is one more than the size of coord_vals and the
+cells must be contiguous.<span style="mso-spacerun: yes">  </span>In the
+case of a 2-d array, it is dimensioned (2, n) where n is the size of coord_vals
+(see CF standard document, <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">http://www.cgd.ucar.edu/cms/eaton/cf-metadata</a>,
+for further information).<span style="mso-spacerun: yes">  </span>This
+argument may be omitted when cell bounds are not required.<span
+style="mso-spacerun: yes">  </span>It must be omitted if coord_vals is
+omitted.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>cell_bounds_ndim = This argument only appears
+in the C version of this function.<span style="mso-spacerun: yes">  
+</span>Except in the case of a character string axis, it specifies the rank of
+the cell_bounds array: if 1, the bounds array will contain n+1 elements, where
+n is length of coord_vals and the cells must be contiguous, whereas if 2, the
+dimension will be (n,2) in C order. <span style="mso-spacerun:
+yes"> </span>Pass 0 if no cell_bounds values have been passed. In the
+special case of a character string axis, this argument is used to specify the
+length of the strings in the coord_vals array (i.e., the array will be
+dimensioned [length][cell_bounds_ndim]). </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[interval] = Supplemental information that will be included in the
+cell_methods attribute, which is typically defined for the time axis in order
+to describe the sampling interval.<span style="mso-spacerun: yes"> 
+</span>This string should be of the form: "<i style='mso-bidi-font-style:
+normal'>value unit</i> comment: <i style='mso-bidi-font-style:normal'>anything</i>"
+(where "comment:" and <i style='mso-bidi-font-style:normal'>anything</i>
+may always be omitted).<span style="mso-spacerun: yes">  </span>For
+monthly mean data sampled every 15 minutes, for example, interval = "15
+minutes".</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style="mso-spacerun: yes">  </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'>Returns</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in'><span style='color:#00B050'>Fortran: a negative integer if an error is
+encountered; otherwise returns a positive integer (the “handle”) uniquely
+identifying the axis.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>C: 0 upon success.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600'>Python: upon success, a positive integer
+(the “handle”) uniquely identifying the axis, or if an error is encountered an
+exception is raised.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><o:p> </o:p></p>
+
+<h3><a name="_Toc129422011"></a><a name="_Toc134007310"><span style='mso-bookmark:
+_Toc129422011'>Define an Axis Attribute: cmor_set_axis_attribute</span></a> </h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><b style='mso-bidi-font-weight:normal'><u><o:p><span style='text-decoration:
+ none'> </span></o:p></u></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050;background:silver;mso-highlight:silver'>Fortran:
+Not implemented because it is not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_set_axis_attribute(int axis_id, char *attribute_name, char type, void
+*value)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'>Python: Not implemented because it is
+not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Description</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<span style="mso-spacerun: yes"> 
+</span>Defines an attribute to be associated with the axis specified by the
+axis_id.<span style="mso-spacerun: yes">  </span>This is not likely to be
+needed in preparing CMIP5 output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>axis_id
+= the “handle” returned by cmor_axis (when the axis was defined), which will
+become better described by the attribute defined in this function.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>attribute_name
+= name of the attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>type =
+type of the attribute value passed.<span style="mso-spacerun: yes">  
+</span>This can be ‘d’ (double), ‘f’ (float), ‘l’ (long), ‘i’ (int), or ‘c’
+(char)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>value =
+whatever value you wish to set the attribute to (type defined by type argument)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Return upon success</span></i><span style='color:blue;
+background:silver;mso-highlight:silver'>:</span><span style='color:blue'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422012"></a><a name="_Toc134007311"><span style='mso-bookmark:
+_Toc129422012'>Retrieve an Axis Attribute: cmor_get_axis_attribute</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><b style='mso-bidi-font-weight:normal'><u><o:p><span style='text-decoration:
+ none'> </span></o:p></u></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050;background:silver;mso-highlight:silver'>Fortran:
+Not implemented because it is not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag = cmor_get_axis_attribute(int
+axis_id, char *attribute_name, char type, void *value)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'>Python: Not implemented because it is
+not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Description</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>: retrieves an attribute value set for the axis
+specified by the axis_id. This is not likely to be needed in preparing CMIP5
+output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>axis_id
+= the “handle” returned by cmor_axis (when the axis was defined) with which the
+attribute requested is associated.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>attribute_name
+= name of the attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>type =
+type of the attribute value to be retrieved.<span style="mso-spacerun:
+yes">  </span>This can be ‘d’ (double), ‘f’ (float), ‘l’ (long), ‘i’
+(int), or ‘c’ (char).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>value =
+the argument that will accept the retrieved attribute.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Return upon success</span></i><span style='color:blue;
+background:silver;mso-highlight:silver'>:</span><span style='color:blue'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422013"></a><a name="_Toc134007312"><span style='mso-bookmark:
+_Toc129422013'>Inquire whether an Axis Attribute Exists:
+cmor_has_axis_attribute</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><b style='mso-bidi-font-weight:normal'><u><o:p><span style='text-decoration:
+ none'> </span></o:p></u></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050;background:silver;mso-highlight:silver'><span
+style="mso-spacerun: yes"> </span>Fortran: Not implemented because it is
+not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='color:blue;background:silver;mso-highlight:
+silver'>C: error_flag = cmor_has_axis_attribute(int axis_id, char
+*attribute_name)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'>Python: Not implemented because it is
+not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Description</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>: Determines whether an attribute exists and is
+associated with the variable specified by variable_id, which is a handle
+returned to the user by a previous call to cmor_variable.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;page-break-after:
+avoid'><i style='mso-bidi-font-style:normal'><span style='color:blue;
+background:silver;mso-highlight:silver'>Arguments</span></i><span
+style='color:blue;background:silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>axis_id
+= the “handle” specifying which axis is of interest.<span style="mso-spacerun:
+yes">  </span>An axis_id is returned by cmor_variable each time a variable
+is defined).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>attribute_name
+= name of the attribute of interest.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Returns upon success (i.e., the attribute was found):<o:p></o:p></span></i></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h2><a name="_Toc129422014"></a><a name="_Toc134007313"><span style='mso-bookmark:
+_Toc129422014'>Dealing with Grids</span></a></h2>
+
+<h3><a name="_Toc129422015"></a><a name="_Toc134007314"><span style='mso-bookmark:
+_Toc129422015'>Define a Grid: cmor_grid</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: grid_id =
+cmor_grid(axis_ids, latitude, longitude, [latitude_vertices], [longitude_vertices],
+[nvertices]) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_grid(int *grid_id, int ndims, int *axis_ids, char type, void *latitude,
+void *longitude, int nvertices, void *latitude_vertices, void
+*longitude_vertices)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: grid_id =
+grid(axis_ids, latitude, longitude, latitude_vertices=None, longitude_vertices=None,
+nvertices=0)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: Define a grid to be associated with data, including the latitude and
+longitude arrays. The grid can be structured with up to 6 dimensions. These
+dimensions, which may be simple “index” axes, must be defined via cmor_axis
+prior to calling cmor_grid. This function returns a "handle"
+(grid_id) that uniquely identifies the grid (and its data/metadata) to be
+written.<span style="mso-spacerun: yes">  </span>The grid_id will subsequently
+be passed by the user to other CMOR functions.<span style="mso-spacerun:
+yes">  </span>The cmor_grid function will typically be invoked to define each
+grid necessary for the experiment (e.g., ocean grid, vegetation grid,
+atmosphere grid, etc…).<span style="mso-spacerun: yes">  </span>There is
+no need to call this function in the case of a Cartesian lat/lon grid.<span
+style="mso-spacerun: yes">  </span>In this case, simply define the
+latitude and longitude axes and pass their id’s (“handles”) to cmor_variable.
+Grids can be time dependent as well, in this case the latitude, longitude and
+vertices_latitude, vertices_longitude must be defined separately via cmor_time_varying_grid_coordinate.
+Note that in this case the number of vertices <i style='mso-bidi-font-style:
+normal'>must</i> be passed when calling cmor_grid.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Arguments</span></i><span style='background:silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>grid_id
+= the “handle”: a positive integer returned by CMOR, which uniquely identifies
+the grid defined in this call to CMOR and subsequently can be used in calls to
+CMOR.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>ndims =
+number of dimensions needed to define the grid (i.e., the number of elements
+from axis_ids that will be used).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>axis_ids = array
+containing the axis_s returned by cmor_axis when defining the axes constituting
+the grid.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[latitude] = array
+containing the grid’s latitude information (ndims dimensions), optional <i
+style='mso-bidi-font-style:normal'>only</i> in the case of time varying grids. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>]longitude] = array
+containing the grid’s longitude information (ndims dimensions), optional <i
+style='mso-bidi-font-style:normal'>only</i> in the case of time varying grids <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[nvertices] =
+length of vertices axis.<span style="mso-spacerun: yes">  </span>Fortran
+and Python can figure this out if latitude_vertices is passed. But in case of
+time-varying grids this is necessary in order to prepare the “Vertices”
+variable correctly.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[latitude_vertices]
+= array containing the grid’s latitude vertices information (ndim+1 dimensions).
+The vertices dimension must be the fastest varying dimension of the array (i.e.,
+<span style='color:#00B050'>first one in Fortran</span>, <span
+style='color:blue'>last one in C</span>, <span style='color:#FF6600'>last one
+in Python</span>) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[longitude_vertices]
+= array containing the grid’s longitude vertices information (ndim+1 dimensions).
+The vertices dimension must be the fastest varying dimension of the array (i.e.,
+<span style='color:#00B050'>first one in Fortran</span>, <span
+style='color:blue'>last one in C</span>, <span style='color:#FF6600'>last one
+in Python</span>) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><i style='mso-bidi-font-style:normal'><span
+style='background:silver;mso-highlight:silver'>Returns</span></i><span
+style='background:silver;mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#00B050;background:silver;
+mso-highlight:silver'>Fortran: a positive integer if an error is encountered;
+otherwise returns a negative integer (the “handle”) uniquely identifying the
+grid.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:blue;background:silver;mso-highlight:silver'>C: 0
+upon success.</span><span style='color:#00B050;background:silver;mso-highlight:
+silver'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#FF6600;background:silver;
+mso-highlight:silver'>Python: upon success, a positive integer (the “handle”) uniquely
+identifying the axis, or if an error is encountered an exception is raised.</span><span
+style='color:#00B050'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Note:<o:p></o:p></span></i></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>This function used to take an optional extra argument (up
+to CMOR2.0rc4 included), it is now not needed anymore as cellArea and
+cellVolume files are written in a separate file.</span></i><span
+style='color:#FF6600;background:silver;mso-highlight:silver'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422016"></a><a name="_Toc134007315"><span style='mso-bookmark:
+_Toc129422016'>Define Grid Mapping Parameters: cmor_set_grid_mapping</span></a></h3>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: error_flag
+= cmor_set_grid_mapping(grid_id, mapping_name, parameter_names,
+parameter_values, parameter_units) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_set_grid_mapping(int grid_id, char *mapping_name, int nparameters, char
+**parameter_names, int lparameters, double parameter_values[], char
+**parameter_units, int lunits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: set_grid_mapping(grid_id,
+mapping_name, parameter_names, parameter_values=None, parameter_units=None)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: Define the grid mapping parameters associated with a grid (see CF
+conventions for more info on which parameters to set). Check validity of
+parameter names and units. Additional mapping names and parameter names can be
+defined via the MIP table. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Arguments</span></i><span style='background:silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>grid_id = the
+“handle” returned by a previous call to cmor_grid, indicating which grid the
+mapping parameters should be associated with.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>mapping_name = name
+of the mapping (see CF conventions).<span style="mso-spacerun: yes"> 
+</span>This name dictates which parameters should be set and for some
+parameters restricts their possible values or range.<span style="mso-spacerun:
+yes">  </span>New mapping names can be added via MIP tables.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>nparameters
+= number of parameters set.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>parameter_names =
+array (list for Python) of strings containing the names of the parameters to
+set. <span style="mso-spacerun: yes"> </span>In the case of
+“standard_parallel”, CF allows either 1 or 2 parallels to be specified (i.e.
+the attribute standard_parallel may be an array of length 2).<span
+style="mso-spacerun: yes">  </span>In the case of 2 parallels, CMOR
+requires the user to specify these as separate parameters, named standard_parallel_1
+and standard_parallel_2, but then the two parameters will be stored in an
+array, consistent with CF.<span style="mso-spacerun: yes">  </span>In the
+case of a single parallel, the name standard_parallel should be specified. <span
+style="mso-spacerun: yes"> </span><span style='color:blue'>In the C version
+of this function, parameter_names is declared of length
+[nparameters][lparameters], where lparameters in the length of each string array
+element (see below).</span> <span style='color:#FF6600'>In Python parameter_names
+can be defined as a dictionary containing the keys that represent the
+parameter_names. The value associated with each key can be either a list
+[float, str] (or [str, float]) representing the value/units of each parameter,
+or another dictionary containing the keys “value” and “units”. If these
+conditions are fulfilled, then parameter_units and parameter_values are
+optional and would be ignored if passed.<o:p></o:p></span></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>lparameters
+= length of each element of the string array. <span style="mso-spacerun:
+yes"> </span>If, for example, parameter_names includes 5 parameters, each
+24 characters long (i.e., it is declared [5][24]), you would pass lparameters=24.</span><span
+style='background:silver;mso-highlight:silver'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>parameter_values =
+array containing the values associated with each parameter. <span
+style='color:#FF6600'>In Python this is optional if parameter_names is a
+dictionary containing the values and units.<o:p></o:p></span></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>parameter_units =
+array (list for Python) of string containing the units of the parameters to
+set. <span style='color:blue'>In C parameter_units is declared of length
+[nparameters][lunits]</span>. <span style='color:#FF6600'>In Python it is
+optional if parameter_names is a dictionary containing the value and units.<o:p></o:p></span></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>lunits =
+length of each elements of the units string array (e.g., <span
+style="mso-spacerun: yes"> </span>if parameters_units is declared [5][24],
+you would pass 24 because each elements has 24 characters).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Returns upon success</span></i><span style='background:
+silver;mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:#FF6600;background:silver;mso-highlight:silver'>Python:
+None</span><span style='color:#FF6600'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:#FF6600'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:#FF6600'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422017"></a><a name="_Toc134007316"><span style='mso-bookmark:
+_Toc129422017'>Define a Coordinate Variable for a Time Varying Grid:
+cmor_time_varying_grid_coordinate</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: coord_var_id
+= cmor_time_varying_grid_coordinate(grid_id, table_entry, units, missing_value)
+<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='color:blue;background:silver;mso-highlight:
+silver'>C: error_flag = cmor_time_varying_grid_coordinate(int *coord_var_id,
+int grid_id, char *table_entry, char *units, char type, void *missing, [int
+*coordinate_type]) {</span><span style='color:blue'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python:
+coord_var_id = time_varying_grid_coordinate(grid_id, table_entry, units,
+[missing_value])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: Define a grid to be associated with data, including the latitude and
+longitude arrays. The grid can be structured with up to 6 dimensions. These
+dimensions, which may be simple “index” axes, must be defined via cmor_axis
+prior to calling cmor_grid. This function returns a "handle"
+(grid_id) that uniquely identifies the grid (and its data/metadata) to be
+written.<span style="mso-spacerun: yes">  </span>The grid_id will
+subsequently be passed by the user to other CMOR functions.<span
+style="mso-spacerun: yes">  </span>The cmor_grid function will typically
+be invoked to define each grid necessary for the experiment (e.g., ocean grid,
+vegetation grid, atmosphere grid, etc.).<span style="mso-spacerun: yes"> 
+</span>There is no need to call this function in the case of a Cartesian
+lat/lon grid.<span style="mso-spacerun: yes">  </span>In this case, simply
+define the latitude and longitude axes and pass their id’s (“handles”) to
+cmor_variable.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Arguments</span></i><span style='background:silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>coord_var_id
+= the “handle”: a positive integer returned by this function, which uniquely
+identifies the variable and can be used in subsequent calls to CMOR.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>grid_id =the value
+returned by cmor_grid when the grid was created. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>table_entry = name
+of the variable (as it appears in the MIP table) that this function defines. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>units = units of
+the data that will be passed to CMOR by function cmor_write.<span
+style="mso-spacerun: yes">  </span>These units may differ from the units
+of the data output by CMOR.<span style="mso-spacerun: yes">  
+</span>Whenever possible, this string should be interpretable by udunits (see </span><a
+href="http://my.unitdata.ucar.edu/content/software/udunits/"><span
+style='background:silver;mso-highlight:silver'>http://my.unitdata.ucar.edu/content/software/udunits/</span></a><span
+style='background:silver;mso-highlight:silver'>).<span style="mso-spacerun:
+yes">  </span>In the case of dimensionless quantities the units should be
+specified consistent with the CF conventions, so for example: percent,
+units='percent'; for a fraction, units='1'; for parts per million,
+units='1e-6', etc.).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>type =
+type of the missing_value, which must be the same as the type of the array that
+will be passed to cmor_write.<span style="mso-spacerun: yes">  </span>The
+options are: ‘d’ (double), ‘f’ (float), ‘l’ (long) or ‘i’ (int). <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><span
+style="mso-spacerun: yes"> </span>[missing_value] = scalar that is used to
+indicate missing data for this variable.<span style="mso-spacerun: yes"> 
+</span>It must be the same type as the data that will be passed to cmor_write.<span
+style="mso-spacerun: yes">  </span>This missing_value will in general be
+replaced by a standard missing_value specified in the MIP table.<span
+style="mso-spacerun: yes">  </span>If there are no missing data, and the
+user chooses not to declare the missing value, then this argument may be either
+omitted or assigned the value 'none' (i.e., missing_value='none').<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>[coordinate_type]
+= place holder for future implementation, unused, pass NULL <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'><o:p> </o:p></span></i></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><i style='mso-bidi-font-style:normal'><span
+style='background:silver;mso-highlight:silver'>Returns</span></i><span
+style='background:silver;mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#00B050;background:silver;
+mso-highlight:silver'>Fortran: a positive integer if an error is encountered;
+otherwise returns a negative integer (the “handle”) uniquely identifying the
+grid.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:blue;background:silver;mso-highlight:silver'>C: 0
+upon success.</span><span style='color:#00B050;background:silver;mso-highlight:
+silver'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#FF6600;background:silver;
+mso-highlight:silver'>Python: upon success, a positive integer (the “handle”) uniquely
+identifying the axis, or if an error is encountered an exception is raised.</span><span
+style='color:#00B050'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><b style='mso-bidi-font-weight:normal'><u><o:p><span style='text-decoration:
+ none'> </span></o:p></u></b></p>
+
+<h2><a name="_Toc129422018"></a><a name="_Toc134007317"><span style='mso-bookmark:
+_Toc129422018'>Vertical Dimensions</span></a></h2>
+
+<h3><a name="_Toc129422019"></a><a name="_Toc134007318"><span style='mso-bookmark:
+_Toc129422019'>Provide Non-Dimensional Vertical Coordinate Information:
+cmor_zfactor</span></a></h3>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050'>Fortran: zfactor_id = cmor_zfactor(zaxis_id,
+zfactor_name, [axis_ids], [units], zfactor_values, zfactor_bounds) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue'>C: error_flag = cmor_zfactor (int *zfactor_id, int zaxis_id,
+char *zfactor_name, char *units, int ndims, int axis_ids[], char type, void
+*zfactor_values, void *zfactor_bounds)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600'>Python: zfactor_id = zfactor(zaxis_id, zfactor_name,
+units, axis_ids, type, zfactor_values=None, zfactor_bounds=None)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>:<span style="mso-spacerun:
+yes">  </span>Define a factor needed to convert a non-dimensional vertical
+coordinate (model level) to a physical location.<span style="mso-spacerun:
+yes">   </span>For pressure, height, or depth, this function is
+unnecessary, but for dimensionless coordinates it is needed.<span
+style="mso-spacerun: yes">  </span>In the case of atmospheric sigma
+coordinates, for example, a scalar parameter must be defined indicating the top
+of the model, and the variable containing the surface pressure must be
+identified.<span style="mso-spacerun: yes">  </span>The parameters that
+must be defined for different vertical dimensionless coordinates are listed in
+Appendix D of the CF convention document (<a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">http://www.cgd.ucar.edu/cms/eaton/cf-metadata</a>).<span
+style="mso-spacerun: yes">   </span>Often bounds for the zfactors
+will be needed (e.g., for hybrid sigma coordinates, "A's" and
+"B's" must be defined both for the layers and, often more
+importantly, for the layer interfaces).<span style="mso-spacerun: yes"> 
+</span>This function must be invoked for each z-factor required.</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Arguments</i>:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>zfactor_id = the “handle”: a positive integer returned by this function
+which uniquely identifies the grid defined in this call to CMOR and can
+subsequently be used in calls to CMOR.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>zaxis_id = an integer ("handle") returned by cmor_axis (which
+must have been previously called) indicating which axis requires this factor.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>zfactor_name = name of the z-factor (as it appears in the MIP table)
+that will be defined by this function.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style="mso-spacerun: yes"> </span>[axis_ids] = an integer
+array containing the list of axis_id's (individually defined by calls to
+cmor_axis), which the z-factor defined here is a function of (e.g. for surface
+pressure, the array of i.d.'s would usually include the longitude, latitude,
+and time axes.)<span style="mso-spacerun: yes">  </span>The order of the
+axes must be consistent with the array passed as param_values.<span
+style="mso-spacerun: yes">  </span>If the parameter is a function of a
+single dimension (e.g., model level), the single axis_id should be passed as an
+array of rank one and length 1, not as a scalar. If the parameter is a scalar,
+then this parameter may be omitted.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[units] = units associated with the z-factor passed in zfactor_values
+and zfactor_bounds.<span style="mso-spacerun: yes">  </span>(These are the
+units of the user's z-factors, which may differ from the units of the z-factors
+written to the netCDF file by CMOR.) .<span style="mso-spacerun: yes"> 
+</span>These units must be recognized by udunits or must be identical to the
+units specified in the MIP table.<span style="mso-spacerun: yes"> 
+</span>In the case of a dimensionless z-factors, either omit this argument, or
+set units='none', or set units='1'.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>type = type of the zfactor_values and zfactor_bounds
+(if present) passed to this function.<span style="mso-spacerun: yes"> 
+</span>This can be ‘d’ (double), ‘f’ (float), ‘l’ (long), ‘i’ (int), or ‘c’
+(char). </span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[zfactor_values] = z-factor values associated with dimensionless
+vertical coordinate identified by zaxis_id. If this z-factor is a function of
+time (e.g., surface pressure for sigma coordinates), the user can omit this
+argument and instead store the z-factor values by calling cmor_write.<span
+style="mso-spacerun: yes">  </span>In that case the cmor_write argument,
+"var_id", should be set to zfactor_id (returned by this function) and
+the argument, "store_with", should be set to the variable id of the
+output field that requires zfactor as part of its metadata.<span
+style="mso-spacerun: yes">  </span>When many fields are a function of the
+(dimensionless) model level, cmor_write will have to be called several times,
+with the same zfactor_id, but with different variable ids.<span
+style="mso-spacerun: yes">  </span>If no values are passed, omit this
+argument.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[zfactor_bounds] = z-factor values associated with the cell bounds of
+the vertical dimensionless coordinate.<span style="mso-spacerun: yes"> 
+</span>These values should be of the same type as the zfactor_values (e.g., if
+zfactor_values is double precision, then zfactor_bounds must also be double
+precision).<span style="mso-spacerun: yes">  </span>If no bounds values
+are passed, omit this argument or set zfactor = 'none'.<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46"> <span
+style='background:silver;mso-highlight:silver'>This is a ONE dimensional array
+of length nlevs+1</span>.</ins></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><i style='mso-bidi-font-style:normal'>Returns</i>:
+</p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#00B050'>Fortran: a negative
+integer if an error is encountered; otherwise returns a positive integer (the
+“handle”) uniquely identifying the z-factor.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:blue'>C: 0 upon success.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><span style='color:#FF6600'>Python: upon success,
+a positive integer (the “handle”) uniquely identifying the z-factor, or if an
+error is encountered an exception is raised.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<h2><a name="_Toc129422020"></a><a name="_Toc134007319"><span style='mso-bookmark:
+_Toc129422020'>Variables</span></a></h2>
+
+<h3><a name="_Toc129422021"></a><a name="_Toc134007320"><span style='mso-bookmark:
+_Toc129422021'>Define a Variable: cmor_variable</span></a></h3>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050'>Fortran: var_id = cmor_variable([table], table_entry,
+units, axis_ids, [missing_value], [tolerance], [positive], [original_name],
+[history], [comment])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue'>C: error_flag = int cmor_variable(int *var_id, char
+*table_entry, char *units, int ndims, int axis_ids[], char type, void *missing,
+double *tolerance, char *positive, char*original_name, char *history, char
+*comment) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600'>Python: var_id = variable(table_entry, units, axis_ids,
+type='f', missing_value=None, tolerance = 1.e-4, positive=None,
+original_name=None, history=None, comment=None)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>: Define a variable to be
+written by CMOR and indicate which axes are associated with it.<span
+style="mso-spacerun: yes">  </span>This function prepares CMOR to write
+the file that will contain the data for this variable. This function returns a
+"handle" (var_id), uniquely identifying the variable, which will
+subsequently be passed as an argument to the cmor_write function. The variable
+specified by the table_entry argument must be found in the currently “set” CMOR
+table, as specified by the cmor_load_table and cmor_set_table functions<span
+style='color:#00B050'>, or as an option, it can be provided in the Fortran
+version</span><span style='color:#99CC00'> </span><span style='color:#00B050'>(for
+backward compatibility) by the now deprecated “table” keyword argument</span><span
+style='color:#99CC00'>.</span><span style="mso-spacerun: yes">  
+</span>The cmor_variable function will typically be repeatedly invoked to
+define other variables. <span style='color:#00B050'>Note that backward
+compatibility was kept with the Fortran-only optional “table” keyword. But it
+is now recommended to use cmor_load_table and cmor_set_table instead </span>(and
+necessary for C/Python).</p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Arguments</i>:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>var_id = the “handle”: a positive integer
+returned by this function, which uniquely identifies the variable and can be
+used in subsequent calls to CMOR.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#00B050'>[table] = character string containing the
+filename of the MIP-specific table where table_entry (described next) can be
+found (e.g., “CMIP5_table_amon”, 'IPCC_table_A1', 'AMIP_table_1a',
+'AMIP_table_2', 'CMIP_table_2', etc.)<span style="mso-spacerun: yes"> 
+</span>In CMOR2 this is an optional argument and is deprecated because the
+table can be specified through the cmor_load_table and cmor_set_table
+functions.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>table_entry = name of the variable (as it appears in the MIP table) that
+this function defines. </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>units = units of the data that will be passed to CMOR by function cmor_write.<span
+style="mso-spacerun: yes">  </span>These units may differ from the units
+of the data output by CMOR.<span style="mso-spacerun: yes">  
+</span>Whenever possible, this string should be interpretable by udunits (see <a
+href="http://my.unitdata.ucar.edu/content/software/udunits/">http://my.unitdata.ucar.edu/content/software/udunits/</a>).<span
+style="mso-spacerun: yes">  </span>In the case of dimensionless quantities
+the units should be specified consistent with the CF conventions, so for
+example: percent, units='percent'; for a fraction, units='1'; for parts per
+million, units='1e-6', etc.).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>ndims = number of axes the variable contains
+(i.e., the rank of the array), which in fact is the number of elements in the axis_ids
+array that will be processed by CMOR.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>axis_ids = 1-d array containing integers returned by cmor_axis, which
+specifies, via their “handles” (i.e., axis_ids), the axes associated with the
+variable that this function defines. These handles should be ordered
+consistently with the data that will be passed to CMOR through function
+cmor_write (see documentation below). If the size of the 1-d array is larger
+than the number of dimensions, the 'unused' dimension handles must be set to
+0.<span style="mso-spacerun: yes">  </span>Note that if the handle of a
+single axis is passed, it must not be passed as a scalar but as a rank 1 array
+of length 1.<span style="mso-spacerun: yes">  </span>Scalar
+("singleton") dimensions defined in the MIP table may be omitted from
+axis_ids unless they have been explicitly redefined by the user through calls
+to cmor_axis.<span style="mso-spacerun: yes">  </span>A
+"singleton" dimension that has been explicitly defined by the user
+should appear last in the list of axis_ids if the array of data passed to
+cmor_write for this variable actually omits this dimension; otherwise it should
+appear consistent with the position of the axis in the array of data passed to
+cmor_write. <span style='background:silver;mso-highlight:silver'>In the case of
+a non-Cartesian grid, replace the values of the grid specific axes (representing
+the lat/lon axes) with the single grid_id returned by cmor_grid</span>.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>type = type of the missing_value, which must be
+the same as the type of the array that will be passed to cmor_write.<span
+style="mso-spacerun: yes">  </span>The options are: ‘d’ (double), ‘f’
+(float), ‘l’ (long) or ‘i’ (int). <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style="mso-spacerun: yes"> </span>[missing_value] = scalar
+that is used to indicate missing data for this variable.<span
+style="mso-spacerun: yes">  </span>It must be the same type as the data
+that will be passed to cmor_write.<span style="mso-spacerun: yes"> 
+</span>This missing_value will in general be replaced by a standard
+missing_value specified in the MIP table.<span style="mso-spacerun: yes"> 
+</span>If there are no missing data, and the user chooses not to declare the
+missing value, then this argument may be either omitted or assigned the value
+'none' (i.e., missing_value='none').</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[tolerance] = scalar (type real) indicating fractional tolerance allowed
+in missing values found in the data.<span style="mso-spacerun: yes"> 
+</span>A value will be considered missing if it lies within
+±tolerance*missing_value of missing_value.<span style="mso-spacerun:
+yes">  </span>The default tolerance for real and double precision missing
+values is 1.0e-4 and for integers 0.<span style="mso-spacerun: yes"> 
+</span>This argument is ignored if the missing_value argument is not present.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[positive] = 'up' or 'down' depending on whether a user-passed vertical
+energy (heat) flux or surface momentum flux (stress) input to CMOR is positive
+when it is directed upward or downward, respectively.<span style="mso-spacerun:
+yes">   </span>This information will be used by CMOR to determine
+whether a sign change is necessary to make the data consistent with the MIP
+requirements.<span style="mso-spacerun: yes">  </span>This argument is
+required for vertical energy and salt fluxes, for "flux correction"
+fields, and for surface stress; it is ignored for all other variables.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[original_name] = the name of the variable as it is commonly known at
+the user's home institute.<span style="mso-spacerun: yes">  </span>If the
+variable passed to CMOR was computed in some simple way from two or more
+original fields (e.g., subtracting the upwelling and downwelling fluxes to get
+a net flux), then it is recommended that this be indicated in the
+"original_name" (e.g., "irup – irdown", where
+"irup" and "irdown" are the names of the original fields
+that were subtracted).<span style="mso-spacerun: yes">  </span>If more
+complicated processing was required, this information would more naturally be
+included in a "history" attribute for this variable, described next.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[history] = how the variable was processed before outputting through
+CMOR (e.g., give name(s) of the file(s) from which the data were read and
+indicate what calculations were performed, such as interpolating to standard
+pressure levels or adding 2 fluxes together).<span style="mso-spacerun:
+yes">  </span>This information should allow someone at the user's
+institute to reproduce the procedure that created the CMOR output.<span
+style="mso-spacerun: yes">  </span>Note that this history attribute is
+variable-specific, whereas the history attribute defined by cmor_dataset
+provides information concerning the model simulation itself or refers to
+processing procedures common to all variables (for example, mapping model
+output from an irregular grid to a Cartesian coordinate grid).<span
+style="mso-spacerun: yes">  </span>Note that when appropriate, CMOR will
+also indicate in the "history" attribute any operations it performs
+on the data (e.g., scaling the data, changing the sign, changing its type,
+reordering the dimensions, reversing a coordinate's direction or offsetting
+longitude). Any user-defined history will precede the information generated by
+CMOR.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[comment] = additional notes concerning this variable can be included here.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'>Returns</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in'><span style='color:#00B050'>Fortran: a negative integer if an error is
+encountered; otherwise returns a positive integer (the “handle”) uniquely
+identifying the variable.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>C: 0 upon success.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600'>Python: upon success, a positive integer
+(the “handle”) uniquely identifying the variable, or if an error is encountered
+an exception is raised.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<h3><a name="_Toc129422022"></a><a name="_Toc134007321"><span style='mso-bookmark:
+_Toc129422022'>Define a Variable Attribute: cmor_set_variable_attribute</span></a></h3>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><o:p> </o:p></p>
+
+<p class=MsoNormal style='page-break-after:avoid'><span style='color:#00B050;
+background:silver;mso-highlight:silver'>Fortran: Not implemented because it is
+not needed for CMIP5<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: error_flag =
+cmor_set_variable_attribute(int variable_id, char *attribute_name, char type,
+void *value)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'>Python: Not implemented because it is
+not needed for CMIP5<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Description</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<span style="mso-spacerun: yes"> 
+</span>Defines an attribute to be associated with the variable specified by the
+variable_id.<span style="mso-spacerun: yes">  </span>This function is
+unlikely to be called in preparing CMIP5 output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:blue;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>variable_id
+= the “handle” returned by cmor_variable (when the variable was defined), which
+will become better described by the attribute defined in this function.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>attribute_name
+= name of the attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>type =
+type of the attribute value passed, which can be ‘d’ (double), ‘f’ (float), ‘l’
+(long), ‘i’ (int), or ‘c’ (char).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>value =
+whatever value you wish to set the attribute to (type defined by type
+argument).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='color:blue;
+background:silver;mso-highlight:silver'>Returns upon success</span></i><span
+style='color:blue;background:silver;mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422023"></a><a name="_Toc134007322"><span style='mso-bookmark:
+_Toc129422023'>Retrieve a Variable Attribute: cmor_get_variable_attribute</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;page-break-after:
+avoid'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050;background:silver;mso-highlight:silver'>Fortran:
+Not implemented because it is not needed for CMIP5<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='color:blue;background:silver;mso-highlight:
+silver'>C: error_flag = cmor_get_variable_attribute(int variable_id, char
+*attribute_name, char type, void *value)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'>Python: Not implemented because it is
+not needed for CMIP5<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Description</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>: retrieves an attribute value set for the
+variable specified by the variable_id. This function is unlikely to be called
+in preparing CMIP5 output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>variable_id
+= the “handle” returned by cmor_variable (when the variable was defined)
+identifying which variable the attribute is associated with.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>attribute_name
+= name of the attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>type =
+type of the attribute value to be retrieved.<span style="mso-spacerun:
+yes">  </span>This can be ‘d’ (double), ‘f’ (float), ‘l’ (long), ‘i’
+(int), or ‘c’ (char)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>value =
+the argument that will accept the retrieved attribute.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='color:blue;
+background:silver;mso-highlight:silver'>Returns upon success</span></i><span
+style='color:blue;background:silver;mso-highlight:silver'>: <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422024"></a><a name="_Toc134007323"><span style='mso-bookmark:
+_Toc129422024'>Inquire Whether a Variable Attribute Exists:
+cmor_has_variable_attribute</span></a></h3>
+
+<p class=MsoNormal style='text-align:justify;page-break-after:avoid'><span
+style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal><span style='color:#00B050;background:silver;mso-highlight:
+silver'>Fortran: Not implemented because it is not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='color:blue;background:silver;mso-highlight:
+silver'>C: error_flag = cmor_has_variable_attribute(int variable_id, char *attribute_name)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'>Python: Not implemented because it is
+not needed for CMIP5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='color:#FF6600;
+background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Description</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>: Determines whether an attribute exists and is
+associated with the variable specified by variable_id, which is a handle
+returned to the user by a previous call to cmor_variable.<span
+style="mso-spacerun: yes">  </span>This function is unlikely to be called
+in preparing CMIP5 output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='color:blue;background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='color:blue;background:
+silver;mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>variable_id
+= the “handle” specifying which variable is of interest.<span
+style="mso-spacerun: yes">  </span>A variable_id is returned by
+cmor_variable each time a variable is defined.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'>attribute_name
+= name of the attribute of interest.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue;background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><i style='mso-bidi-font-style:normal'><span
+style='color:blue;background:silver;mso-highlight:silver'>Returns upon success
+(i.e., if the attribute is found): </span></i><span style='color:blue;
+background:silver;mso-highlight:silver'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><o:p> </o:p></p>
+
+<h2><a name="_Toc129422025"></a><a name="_Toc134007324"><span style='mso-bookmark:
+_Toc129422025'>Writing Data</span></a></h2>
+
+<h3><a name="_Toc129422026"></a><a name="_Toc134007325"><span style='mso-bookmark:
+_Toc129422026'>Generate Output Path: cmor_create_output_path</span></a></h3>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: call cmor_create_output_path(var_id,
+path)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: isfixed =
+cmor_create_output_path(int var_id, char *path) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: path =
+create_output_path(var_id)</span><span style='background:silver;mso-highlight:
+silver'> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><span style='background:silver;
+mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Description</span></i><span style='background:silver;mso-highlight:
+silver'>: construct the output path, consistent with CMIP5 specifications,
+where the file will be stored.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'><span style='background:silver;
+mso-highlight:silver'>Arguments</span></i><span style='background:silver;
+mso-highlight:silver'>:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>var_id = variable
+identification (as returned from cmor_variable) you wish to get the output path
+for.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>path = string (or pointer
+to a string), which is returned by the function and contains the output path.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'><span style='background:silver;mso-highlight:
+silver'>Returns</span></i><span style='background:silver;mso-highlight:silver'>:
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050;background:silver;mso-highlight:silver'>Fortran: nothing
+it is a subroutine <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue;background:silver;mso-highlight:silver'>C: 0 upon success or
+1 if the filed is a fixed field</span><span style='color:#00B050;background:
+silver;mso-highlight:silver'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#FF6600;background:silver;mso-highlight:silver'>Python: the full
+path to the output file</span><span style='color:#00B050;background:silver;
+mso-highlight:silver'><o:p></o:p></span></p>
+
+<h3><a name="_Toc129422027"></a><a name="_Toc134007326"><span style='mso-bookmark:
+_Toc129422027'>Write Data to File: cmor_write</span></a> </h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#00B050'>Fortran: error_flag = cmor_write(var_id, data,
+[file_suffix], [ntimes_passed], [time_vals], [time_bnds], [store_with])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:blue'>C: error_flag = cmor_write(int var_id, void *data, char
+type, char *file_suffix, int ntimes_passed, double *time_vals, double
+*time_bounds, int *store_with) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='color:#FF6600'>Python: write(var_id, data, ntimes_passed=None,
+file_suffix="", time_vals=None, time_bnds=None, store_with=None)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify'><i
+style='mso-bidi-font-style:normal'>Description</i>:<span style="mso-spacerun:
+yes">  </span>For the variable identified by var_id, write an array of data
+that includes one or more time samples.<span style="mso-spacerun: yes"> 
+</span>This function will typically be repeatedly invoked to write other
+variables or append additional time samples of data.<span style="mso-spacerun:
+yes">  </span>Note that time-slices of data must be written
+chronologically.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><i style='mso-bidi-font-style:normal'>Arguments</i>:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>var_id = integer returned by cmor_variable identifying the variable that
+will be written by this function.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>data = array of data written by this function (of rank<8).<span
+style="mso-spacerun: yes">  </span>The rank of this array should either
+be: (a) consistent with the number of axes that were defined for it, or (b) it
+should be 1-dimensional, in which case the data must be stored contiguously in
+memory. In case (a), an exception is that for a variable that is a function of
+time and when only one "time-slice" is passed, then the array can
+optionally omit this dimension. Thus, for a variable that is a function of
+longitude, latitude, and time, for example, if only a single time-slice is
+passed to cmor_write, the rank of array "data" may be declared as
+either 2 or 3; when declared rank 3, the time-dimension will be size 1.<span
+style="mso-spacerun: yes">  </span>It is recommended (but not required)
+that the shape of data (i.e., the size of each dimension) be consistent with
+those expected for this variable (based on the axis definitions), but they are
+allowed to be larger (the extra values beyond the defined dimension domain will
+be ignored).<span style="mso-spacerun: yes">  </span>In any case the
+dimension sizes (lengths) must obviously not be smaller than those defined by
+the calls to cmor_axis.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:blue'>type = type of variable array (“data”), which
+can be ‘d’ (double), ‘f’ (float), ‘l’ (long) or ‘i’ (int).<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[file_suffix] = string that will be concatenated with a string
+automatically generated by CMOR to form a unique filename where the output is
+written.<span style="mso-spacerun: yes">  </span>This suffix is only
+required when a time-sequence of output fields will not all be written into a
+single file (i.e., two or more files will contain the output for the
+variable).<span style="mso-spacerun: yes">  </span>The file prefix
+generated by CMOR is of the form variable_table, where variable is replaced by
+table_entry (i.e., the name of the variable), and table is replaced by the
+table number (e.g., tas_A1 refers to surface air temperature as specified in
+table A1).<span style="mso-spacerun: yes">  </span>Permitted characters
+will be: a-z, A-Z, 0-9, and “-”.<span style="mso-spacerun: yes">  </span>There
+are no restrictions on the suffix except that it must yield unique filenames
+and that it cannot contain any “_”.<span style="mso-spacerun: yes"> 
+</span>If the user supplies a suffix, the leading '_' should be omitted (e.g.,
+pass '1979-1988', not '_1979-1988').<span style="mso-spacerun: yes"> 
+</span>Note that the suffix passed through cmor_write remains in effect for the
+particular variable until (optionally) redefined by a subsequent call. In the
+case of CMOR “Append mode” (in case the file already existed before a call to
+cmor_setup), then file_suffix is to be used to point to the original file, this
+value should reflect the FULL path where the file can be found, not just the
+file name. CMOR2 will be smart enough to figure out if a suffix was used when
+creating that file. Note that this file will be first moved to a temporary file
+and eventually renamed to reflect the additional times written to it.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[ntimes_passed] = integer number of time slices passed on this
+call.<span style="mso-spacerun: yes">  </span>If omitted, the number will
+be assumed to be the size of the time dimension of the data (if there is a time
+dimension).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[time_vals] = 1-d array (must be double precision) time coordinate
+values associated with the data array.<span style="mso-spacerun: yes"> 
+</span>This argument should appear only if the time coordinate values were not
+passed in defining the time axis (i.e., in calling cmor_axis).<span
+style="mso-spacerun: yes">  </span>The units should be consistent with
+those passed as an argument to cmor_axis in defining the time axis.<span
+style="mso-spacerun: yes">  </span>If cell bounds are also passed (see
+next argument, '[time_bnds]'), then CMOR will first check that each coordinate
+value is not outside its associated cell bounds; subsequently, however, the
+user-defined coordinate value will be replaced by the mid-point of the interval
+defined by its bounds, and it is this value that will be written to the netCDF
+file.</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[time_bnds] = 2-d array (must be double precision) containing time
+bounds, which should be in the same units as time_vals.<span
+style="mso-spacerun: yes">  </span>If the time_vals argument is omitted,
+this argument should also be omitted.<span style="mso-spacerun:
+yes">    </span>The array should be dimensioned <span
+style='color:green'>(2, n) in Fortran, </span>and (n,2)<span style='color:green'>
+</span><span style='color:#3366FF'>in C</span><span style='color:#F79646'>/Python,</span>
+where n is the size of time_vals (see CF standard document, <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">http://www.cgd.ucar.edu/cms/eaton/cf-metadata</a>,
+for further information).</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'>[store_with] = integer returned by cmor_variable identifying the
+variable that the zfactor should be stored with.<span style="mso-spacerun:
+yes">  </span>This argument must be defined when and only when writing a
+z-factor.<span style="mso-spacerun: yes">  </span>(See description of the
+zfactor function above.)</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in;page-break-after:
+avoid'><i style='mso-bidi-font-style:normal'>Returns upon success</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:#00B050'>Fortran: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;page-break-after:
+avoid'><span style='color:blue'>C: 0 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#FF6600'>Python: None <o:p></o:p></span></p>
+
+<p class=MsoNormal><o:p> </o:p></p>
+
+<p class=MsoNormal><o:p> </o:p></p>
+
+<h3><a name="_Toc129422028"></a><a name="_Toc134007327"><span style='mso-bookmark:
+_Toc129422028'>Close File(s): cmor_close</span></a></h3>
+
+<p class=MsoNormal style='page-break-after:avoid'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#00B050'>Fortran: error_flag = cmor_close(var_id,
+file_name)</span><span style='color:blue'><span style="mso-spacerun:
+yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:blue'>C: error_flag = cmor_close(void) <span
+style="mso-spacerun: yes"> </span>or<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:blue'>C: error_flag = cmor_close_variable(int var_id,
+char *file_name<span class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">, int *preserved_var_id)</ins></span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in;page-break-after:
+avoid'><span style='color:#FF6600'>Python: error_flag (or if name=True, returns
+the name of the file and optionally the new var_id if preserve is True) =
+close(var_id=None, file_name=False<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">,
+preserve_var=False)</ins></span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify'><i style='mso-bidi-font-style:
+normal'><o:p> </o:p></i></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><i style='mso-bidi-font-style:normal'>Description</i>:<span
+style="mso-spacerun: yes">  </span>Close a single file specified by
+optional argument var_id, or if the argument is omitted (or void), close all
+files created by CMOR (including log files). To be safe, before exiting any
+program that invokes CMOR, it is often best to call this function with the
+argument omitted. <span style='color:blue'>When using C, to close a single
+variable, use: cmor_close_variable(var_id), rather than cmor_close(void)</span>.
+<span style='background:silver;mso-highlight:silver'>When using this function
+to close a single file, an additional optional argument (of type “string”) can
+be included, into which will be returned the file name created by CMOR.<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"> Another additional optional argument can be passed
+specifying if the variable should be preserved, i.e more data have to be
+written for this variable but you wish to start a new file, in this case a new
+var_id is returned for this variable for the user to use later in the code.</ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:-.5in'><o:p> </o:p></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in;page-break-after:avoid'><i style='mso-bidi-font-style:normal'>Arguments</i>:</p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style="mso-spacerun: yes"> </span>[var_id] = the “handle”
+identifying an individual variable and the associated output file that will be
+closed by this function. </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'>[file_name] = a
+string where the output file name will be stored. This option provides a convenient
+method for the user to record the filename, which might be needed on a
+subsequent call to CMOR, for example, in order to append additional time
+samples to the file.<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46"><o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='background:silver;mso-highlight:silver'><span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">[preserved_var_id]
+= the handle where the “preserved” var_id should be stored to.</ins></span><span
+style="mso-spacerun: yes">  </span></span><span style='color:#FF6600'><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='text-align:justify;text-indent:.5in'><i
+style='mso-bidi-font-style:normal'>Returns</i>: </p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:#00B050'>Fortran: 0 upon success<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
+style='color:blue'>C: 0 upon success<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
+-.5in'><span style='color:#FF6600'><span style='mso-tab-count:1'>            </span>Python:
+None if file_name=False or the name of the file if file_name=True<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">. Additionally if preserved=True was passed then it
+will return the<span style="mso-spacerun: yes">  </span>new var_id (after
+the filename if the file name of the just closed file was requested).</ins></span></span></p>
+
+<b><span style='font-size:16.0pt;font-family:Arial;mso-fareast-font-family:
+"Times New Roman";mso-bidi-font-family:Arial;mso-font-kerning:16.0pt;
+mso-ansi-language:EN-US;mso-fareast-language:EN-US'><br clear=ALL
+style='page-break-before:always'>
+</span></b>
+
+<h1><a name="_Toc129422029"></a><a name="_Toc134007328"><span style='mso-bookmark:
+_Toc129422029'>Appendix A: Errors in CMOR</span></a></h1>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<h2><a name="_Toc129422030"></a><a name="_Toc134007329"><span style='mso-bookmark:
+_Toc129422030'>Critical Errors</span></a></h2>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>The following errors are considered as CRITICAL and
+will cause a CMOR code to stop.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>1.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Calling a CMOR function
+before running cmor_setup<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>2.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF version is neither 3.6.3
+or 4.1 or greater<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>3.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Udunits could not parse
+units<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>4.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Incompatible units<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>5.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Udunits could not create a
+converter<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>6.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Logfile could not be open
+for writing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>7.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Output directory does not
+exist<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>8.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Output directory is not a
+directory<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>9.<span
+style='font:7.0pt "Times New Roman"'>     </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>User does not have
+read/write privileges on the output directory<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>10.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Wrong value for error_mode<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>11.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>wrong value for netCDF mode<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>12.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>error reading udunits system<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>13.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF could not set
+variable attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>14.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Dataset does not have one of
+the required attributes (required attributes can be defined in the MIP table)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>15.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Required global attribute is
+missing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>16.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">If CMIP5
+project: source attributes does not start with model_id attribute.<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>17.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Forcing dataset attribute is
+not valid<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>18.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Leap_year defined with
+invalid leap_month<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>19.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Invalid leap month (<1 or
+>12)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>20.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Leap month defined but no
+leap year<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>21.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Negative realization number<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>22.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Zfactor variable not defined
+when needed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>23.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Variable has axis defined
+with formula terms depending on axis that are not part of the variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>24.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error<span
+style="mso-spacerun: yes">  </span>when creating zfactor variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>25.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF Error defining
+compression parameters<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>26.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Calling cmor_write with an
+invalid variable id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>27.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Could not create path
+structure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>28.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>“variable id” contains a “_”
+or a ‘-‘ this means bad MIP table.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>29.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>“file_suffix” contains a “_”<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>30.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Could not rename the file
+you’re trying to append to.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>31.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Trying to write an “Associated
+variable” before the variable itself<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>32.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Output file exists and
+you’re not in append/replace mode<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>33.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF Error opening file
+for appending<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>34.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF could not find time
+dimension in a file onto which you want to append<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>35.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF could not figure out
+the length time dimension in a file onto which you want to append<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>36.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF could not find your
+variable while appending to a file<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>37.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF could not find time
+dimension in the variable onto which you’re trying to append<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>38.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF could not find time
+bounds in the variable onto which you’re trying to append<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>39.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF mode got corrupted.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>40.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error creating file<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>41.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error putting file in
+definition mode<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>42.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error writing file
+global attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>43.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error creating
+dimension in file<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>44.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error creating
+variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>45.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error writing
+variable attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>46.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error setting
+chunking parameters<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>47.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error leaving
+definition mode<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>48.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “a” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>49.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “b” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>50.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “a_bnds” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>51.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “b_bnds” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>52.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “p0” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>53.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “ap” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>54.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “ap_bnds” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>55.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “sigma” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>56.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Hybrid coordinate, could not
+find “sigma_bnds” coefficient<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>57.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF writing error<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>58.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>NetCDF error closing file<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>59.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Could not rename temporary
+file to its final name.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>60.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Cdms could not convert time
+values for calendar.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>61.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Variable does not have all
+required attributes (cmor_variable)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>62.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Reference variable is
+defined with “positive”, user did not pass it to cmor_variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>63.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Could not allocate memory
+for zfactor elements<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>64.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Udunits error freeing units<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>65.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Udunits error freeing
+converter<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>66.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Could not allocate memory
+for zfactor_bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>67.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Calling cmor_variable before
+reading in a MIP table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>68.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Too many variable defined
+(see appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>69.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Could not find variable in
+MIP table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>70.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Wrong parameter “positive”
+passed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>71.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>No “positive” parameter
+passed to cmor_variable and it is required for this variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>72.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Variable defined with too
+many (not enough) dimensions<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>73.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Variable defined with axis
+that should not be on this variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>74.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Variable defined within
+existing axis (wrong axis_id)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>75.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Defining variable with axes
+defined in a MIP table that is not the current one.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>76.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Defining a variable with too
+many axes (see annex on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>77.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Defining a variable with
+dimensions that are not part of the MIP table (except for var named “latitude”
+and “longitude”, since they could have grid axes defined in another MIP table)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>78.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Trying to retrieve length of
+time for a variable defined w/o time length<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>79.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Trying to retrieve variable
+shape into an array of wrong rank (Fortran only really)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>80.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Calling cmor_write with time
+values for a timeless variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>81.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Cannot allocate memory for
+temporary array to write<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>82.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Invalid absolute mean for
+data written (lower or greater than what the MIP table allows)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>83.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Calling cmor_write with time
+values when they have already been defined with cmor_axis when creating time
+axis<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>84.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Cannot allocate memory to
+store time values<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>85.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Cannot allocate memory to
+store time bounds values<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>86.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Time values are not
+monotonic<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>87.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Calling cmor_write w/o time
+values when no values were defined via cmor_axis when creating time axis<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>88.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Time values already written
+in file<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>89.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Time axis units do not contain
+“since” word (cmor_axis)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>90.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Invalid data type for time
+values (ok are ‘f’,’l’,’i’,’d’)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>91.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Time values are not within
+time bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>92.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Non monotonic time bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>93.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Longitude axis spread over
+360 degrees.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>94.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>Overlapping bound values
+(except for climatological data)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>95.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>bounds and axis values are
+not stored in the same order<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>96.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>requested value for axis not
+present<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>97.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>approximate time axis
+interval much greater (>20%) than the one defined in your MIP table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>98.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>calling cmor_axis before
+loading a MIP table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>99.<span
+style='font:7.0pt "Times New Roman"'>   </span></span></span><![endif]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>too many axes defined (see
+appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>100.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>could not find reference axis name in current MIP table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>101.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>output axis needs to be standard_hybrid_sigma and input axis is not one
+of : “standard_hybrid_sigma”, “alternate_hybrid_sigma”, “standard_sigma”<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>102.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>MIP table requires to convert axis to unknown type<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>103.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>requested “region” not present on axis<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>104.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>axis (with bounds) values are in invalid type (valid are:
+‘f’,’d’,’l’,’i’)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>105.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>requested values already checked but stored internally, could be bad
+user cleanup<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>106.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>MIP table defined for version of CMOR greater than the library you’re
+using<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>107.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>too many experiments defined in MIP table (see appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>108.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>cmor_set_table used with invalid table_id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>109.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>MIP table<span style="mso-spacerun: yes">  </span>has too many
+axes defined in it (see appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>110.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>MIP table<span style="mso-spacerun: yes">  </span>has too many
+variables defined in it (see appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>111.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>MIP table<span style="mso-spacerun: yes">  </span>has too many
+mappings defined in it (see appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>112.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>MIP table<span style="mso-spacerun: yes">  </span>defines the same
+mapping twice<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>113.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>grid mapping has too many parameters (see appendix on CMOR limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>114.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>grid has different number of axes than what grid_mapping prescribes.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>115.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>Could not find all the axes required by grid_mapping<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>116.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>Call to cmor_grid with axis that are not created yet via cmor_axis<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>117.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>Too many grids defined (see appendix on cmor_limits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>118.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>Call to cmor_grid w/o latitude array<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l36 level1 lfo25'><![if !supportLists]><span
+style='font-size:10.0pt;mso-bidi-font-size:14.0pt'><span style='mso-list:Ignore'>119.<span
+style='font:7.0pt "Times New Roman"'>                 
+</span></span></span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:
+14.0pt'>Call to cmor_grid w/o longitude array<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><b style='mso-bidi-font-weight:
+normal'><span style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<b><span style='font-size:16.0pt;font-family:Arial;mso-fareast-font-family:
+"Times New Roman";mso-bidi-font-family:Arial;mso-font-kerning:16.0pt;
+mso-ansi-language:EN-US;mso-fareast-language:EN-US'><span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46"><br
+clear=ALL style='page-break-before:always'>
+</ins></span></span></b>
+
+<h1><a name="_Toc129422031"></a><a name="_Toc134007330"><span style='mso-bookmark:
+_Toc129422031'>Appendix B: Limits in cmor</span></a></h1>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>The following are defined in cmor.h<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_STRING 1024<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;mso-bidi-font-size:14.0pt'>#define
+CMOR_DEF_ATT_STR_LEN 256<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_ELEMENTS 500<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_AXES CMOR_MAX_ELEMENTS*3<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_VARIABLES CMOR_MAX_ELEMENTS<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_GRIDS 10<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_DIMENSIONS 7<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_ATTRIBUTES 100<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_ERRORS 10<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_TABLES 10<o:p></o:p></span></p>
+
+<p class=MsoNormal style='tab-stops:123.0pt'><span style='font-size:10.0pt;
+mso-bidi-font-size:14.0pt'>#define CMOR_MAX_GRID_ATTRIBUTES 15<o:p></o:p></span></p>
+
+<b><span style='font-size:10.0pt;mso-bidi-font-size:16.0pt;font-family:Arial;
+mso-fareast-font-family:"Times New Roman";mso-bidi-font-family:Arial;
+mso-font-kerning:16.0pt;mso-ansi-language:EN-US;mso-fareast-language:EN-US'><br
+clear=ALL style='page-break-before:always'>
+</span></b>
+
+<h1><a name="_Toc129422032"></a><a name="_Toc134007331"><span style='mso-bookmark:
+_Toc129422032'>Appendix C: Sample Codes</span></a></h1>
+
+<h2><a name="_Toc129422033"></a><a name="_Toc134007332"><span style='mso-bookmark:
+_Toc129422033'>FORTRAN</span></a></h2>
+
+<h3><a name="_Toc129422034"></a><a name="_Toc134007333"><span style='mso-bookmark:
+_Toc129422034'>Sample Program 1</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!!$pgf90
+-I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor
+Test/test_dimensionless.f90 -IModules -o cmor_test<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!!$pgf90
+-g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib
+-lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include
+-L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o
+cmor_test<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>MODULE
+local_subs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>USE cmor_users_functions<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>PRIVATE<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>PUBLIC read_coords, read_time,
+read_3d_input_files, read_2d_input_files<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>CONTAINS<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>SUBROUTINE read_coords(alats, alons,
+plevs, bnds_lat, bnds_lon)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>IMPLICIT NONE<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT), DIMENSION(:) :: alats<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT), DIMENSION(:) :: alons<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT), DIMENSION(:) :: plevs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT), DIMENSION(:,:) :: bnds_lat<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT), DIMENSION(:,:) :: bnds_lon<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>INTEGER :: i<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DO i = 1, SIZE(alons)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>alons(i)
+= (i-1)*360./SIZE(alons)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DO i = 1, SIZE(alats)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>alats(i)
+= (size(alats)+1-i)*10<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DO i = 1, SIZE(plevs)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>plevs(i)
+= i*1.0e4<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>plevs =
+(/100000., 92500., 85000., 70000.,&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>60000.,
+50000., 40000., 30000., 25000., 20000.,&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>15000.,
+10000., 7000., 5000., 3000., 2000., 1000. /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>RETURN<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>END SUBROUTINE read_coords<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>SUBROUTINE read_time(it, time,
+time_bnds)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>IMPLICIT NONE<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>INTEGER, INTENT(IN) :: it<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT) :: time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DOUBLE PRECISION,
+INTENT(OUT), DIMENSION(2,1) :: time_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>time = (it-0.5)*30.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>time_bnds(1,1) = (it-1)*30.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>time_bnds(2,1) = it*30.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>RETURN<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>END SUBROUTINE read_time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>SUBROUTINE read_3d_input_files(it,
+varname, field)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>IMPLICIT NONE<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>INTEGER, INTENT(IN) :: it<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CHARACTER(len=*), INTENT(IN)
+:: varname<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>REAL, INTENT(OUT),
+DIMENSION(:,:,:) :: field<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>INTEGER :: i, j, k<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>REAL :: factor, offset<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CHARACTER(len=LEN(varname))
+:: tmp<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>tmp =
+TRIM(ADJUSTL(varname))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>SELECT CASE (tmp)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('CLOUD')<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+0.1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+-50.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('U')<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+1.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+100.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('T')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+0.5<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+-150.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END SELECT<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DO k=1,SIZE(field, 3)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>DO
+j=1,SIZE(field, 2)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          </span>DO
+i=1,SIZE(field, 1)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            </span><span
+style="mso-spacerun: yes"> </span>field(i,j,k) = ((k-1)*64 + (j-1)*16 +
+(i-1)*4 + it)*factor - offset<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>END SUBROUTINE read_3d_input_files<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>SUBROUTINE read_2d_input_files(it,
+varname, field)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>IMPLICIT NONE<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>INTEGER, INTENT(IN) :: it<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CHARACTER(len=*),
+INTENT(IN) :: varname<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>REAL, INTENT(OUT),
+DIMENSION(:,:) :: field<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>INTEGER :: i, j<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>REAL :: factor, offset<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CHARACTER(len=LEN(varname))
+:: tmp<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>tmp =
+TRIM(ADJUSTL(varname))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>SELECT CASE (tmp)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('LATENT')<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+1.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+20.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('TSURF')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+2.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+-220.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('SOIL_WET')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+10.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>CASE ('PSURF')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>factor =
+100.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>offset =
+-9.7e4<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END SELECT<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DO j=1,SIZE(field, 2)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>DO
+i=1,SIZE(field, 1)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>END SUBROUTINE read_2d_input_files<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>END
+MODULE local_subs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>PROGRAM
+ipcc_test_code<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>Purpose:<span
+style="mso-spacerun: yes">   </span>To serve as a generic example of
+an application that<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       </span>uses the
+"Climate Model Output Rewriter" (CMOR)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>CMOR writes CF-compliant
+netCDF files.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Its use is strongly
+encouraged by the IPCC and is intended for use <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       </span>by those
+participating in many community-coordinated standard <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       </span>climate
+model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       </span>etc.)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>Background information for this
+sample code:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">      </span>Atmospheric
+standard output requested by IPCC are listed in <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>tables available on the web.<span
+style="mso-spacerun: yes">  </span>Monthly mean output is found in<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>tables A1a and A1c.<span
+style="mso-spacerun: yes">  </span>This sample code processes only two 3-d
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>variables listed in table A1c
+("monthly mean atmosphere 3-D data" <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>and only four 2-d variables
+listed in table A1a ("monthly mean <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>atmosphere + land surface 2-D
+(latitude, longitude) data").<span style="mso-spacerun: yes"> 
+</span>The <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>extension to many more fields is
+trivial.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">      </span>For this
+example, the user must fill in the sections of code that <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>extract the 3-d and 2-d fields
+from his monthly mean "history" <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>files (which usually contain many
+variables but only a single time <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>slice).<span style="mso-spacerun:
+yes">  </span>The CMOR code will write each field in a separate file, but <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>many monthly mean time-samples
+will be stored together.<span style="mso-spacerun: yes">  </span>These <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>constraints partially determine
+the structure of the code.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">   </span>Record of revisions:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       </span>Date<span
+style="mso-spacerun: yes">       
+</span>Programmer(s)<span style="mso-spacerun:
+yes">          
+</span>Description of change<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       </span>====<span
+style="mso-spacerun: yes">       
+</span>==========<span style="mso-spacerun:
+yes">             
+</span>=====================<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">      </span>10/22/03<span
+style="mso-spacerun: yes">     </span>Rusty Koder<span
+style="mso-spacerun:
+yes">            </span><span
+style="mso-spacerun: yes">  </span>Original code<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">      
+</span>1/28/04<span style="mso-spacerun: yes">    
+</span>Les R. Koder<span style="mso-spacerun:
+yes">            
+</span>Revised to be consistent<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun:
+yes">                                           
+</span>with evolving code design<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+include module that contains the user-accessible cmor functions.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>USE cmor_users_functions<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>USE local_subs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>IMPLICIT NONE<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>dimension parameters:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! ---------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: ntimes = 2<span
+style="mso-spacerun: yes">    </span>! number of time samples to
+process<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: lon = 4<span
+style="mso-spacerun: yes">       </span>! number
+of longitude grid cells<span style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: lat = 3<span
+style="mso-spacerun: yes">       </span>! number
+of latitude grid cells<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: lev = 5<span
+style="mso-spacerun: yes">       </span>! number
+of standard pressure levels<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: lev2 = 17<span
+style="mso-spacerun: yes">       </span>! number
+of standard pressure levels<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: n2d = 4<span
+style="mso-spacerun: yes">       </span>! number
+of IPCC Table A1a fields to be<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                                     
+</span>!<span style="mso-spacerun: yes">     </span>output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, PARAMETER :: n3d = 3<span
+style="mso-spacerun: yes">       </span>! number
+of IPCC Table A1c fields to <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                                     
+</span>!<span style="mso-spacerun: yes">     </span>be
+output.<span style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>Tables associating the user's variables with IPCC
+standard output <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>variables.<span style="mso-spacerun: yes"> 
+</span>The user may choose to make this association in a <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>different way (e.g., by defining values of pointers
+that allow him <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>to directly retrieve data from a data record
+containing many <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>different variables), but in some way the user will
+need to map his <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>model output onto the Tables specifying the MIP
+standard output.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! ----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                               
+</span>! My variable names for IPCC Table A1c fields<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><span style="mso-spacerun:
+yes"> </span>CHARACTER (LEN=5), DIMENSION(n3d) :: &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                                
+</span>varin3d=(/'CLOUD', 'U<span style="mso-spacerun: yes">   
+</span>', 'T<span style="mso-spacerun: yes">    </span>'/)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                               
+</span>! Units appropriate to my data<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>CHARACTER (LEN=5), DIMENSION(n3d) ::
+&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                                 
+</span>units3d=(/ '%<span style="mso-spacerun: yes">   
+</span>', 'm s-1',<span style="mso-spacerun: yes">   </span>'K<span
+style="mso-spacerun: yes">    </span>'<span style="mso-spacerun:
+yes">  </span>/)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                    
+</span>! Corresponding IPCC Table A1c entry (variable name) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>CHARACTER (LEN=2), DIMENSION(n3d) ::
+entry3d = (/ 'cl', 'ua', 'ta' /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                               
+</span>! My variable names for IPCC Table A1a fields<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>CHARACTER (LEN=8), DIMENSION(n2d) ::
+&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                 
+</span>varin2d=(/ 'LATENT<span style="mso-spacerun: yes">  </span>',
+'TSURF<span style="mso-spacerun: yes">   </span>', 'SOIL_WET',
+'PSURF<span style="mso-spacerun: yes">   </span>' /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                               
+</span>! Units appropriate to my data<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">   </span>CHARACTER (LEN=6), DIMENSION(n2d)
+:: &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span><span style="mso-spacerun:
+yes">    </span>units2d=(/ 'W m-2 ', 'K<span
+style="mso-spacerun: yes">     </span>', 'kg m-2', 'Pa<span
+style="mso-spacerun: yes">    </span>' /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">   </span>CHARACTER (LEN=4), DIMENSION(n2d)
+:: &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>positive2d= (/<span style="mso-spacerun: yes">  </span>'down',<span
+style="mso-spacerun: yes">  </span>'<span style="mso-spacerun:
+yes">    </span>', '<span style="mso-spacerun:
+yes">    </span>', '<span style="mso-spacerun:
+yes">    </span>'<span style="mso-spacerun: yes"> 
+</span>/)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                    
+</span>! Corresponding IPCC Table A1a entry (variable name) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>CHARACTER (LEN=5), DIMENSION(n2d) ::
+&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                       
+</span>entry2d = (/ 'hfls ', 'tas<span style="mso-spacerun: yes"> 
+</span>', 'mrsos', 'ps<span style="mso-spacerun: yes">   </span>' /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>uninitialized variables used in
+communicating with CMOR:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes"> 
+</span>---------------------------------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER :: error_flag<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER :: znondim_id, zfactor_id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, DIMENSION(n2d) :: var2d_ids<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER, DIMENSION(n3d) :: var3d_ids<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL, DIMENSION(lon,lat) :: data2d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL, DIMENSION(lon,lat,lev2) :: data3d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(lat) ::
+alats<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(lon) ::
+alons<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(lev2) ::
+plevs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(1) :: time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(2,1)::
+bnds_time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(2,lat) ::
+bnds_lat<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(2,lon) ::
+bnds_lon<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(lev) ::
+zlevs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION, DIMENSION(lev+1) ::
+zlev_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL, DIMENSION(lev) :: a_coeff<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL, DIMENSION(lev) :: b_coeff<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL :: p0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL, DIMENSION(lev+1) :: a_coeff_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>REAL, DIMENSION(lev+1) :: b_coeff_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER :: ilon, ilat, ipres, ilev,
+itim, itim2, ilon2,ilat2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DOUBLE PRECISION bt<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>character(256)::<span
+style="mso-spacerun: yes">  </span>outpath<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Other variables:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>---------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>INTEGER :: it, m<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>bt=0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! ================================<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Execution begins here:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! ================================<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! Read coordinate information from
+model into arrays that will be passed <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>to CMOR.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! Read latitude, longitude, and
+pressure coordinate values into <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>alats, alons, and plevs, respectively.<span
+style="mso-spacerun: yes">  </span>Also generate latitude and <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>longitude bounds, and store in bnds_lat and bnds_lon,
+respectively.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>Note that all variable names in this code can be
+freely chosen by<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>the user.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>The user must write the subroutine that fills the
+coordinate arrays <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>and their bounds with actual data.<span
+style="mso-spacerun: yes">  </span>The following line is simply a<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>a place-holder for the user's code, which should
+replace it.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>*** possible user-written call ***<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>call read_coords(alats, alons, plevs,
+bnds_lat, bnds_lon)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! Specify path where tables can be
+found and indicate that existing <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">    </span>netCDF files should not be overwritten.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>error_flag = cmor_setup(inpath='Test',
+netcdf_file_action='replace')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>! Define dataset as output from the
+GICC model (first member of an<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>ensemble of simulations) run under IPCC 2xCO2
+equilibrium<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>experiment conditions, and provide information to be
+included as <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>attributes in all CF-netCDF files written as part of
+this dataset.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>error_flag = cmor_dataset(<span
+style="mso-spacerun:
+yes">          </span><span
+style="mso-spacerun:
+yes">                         </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>outpath='Test',<span style="mso-spacerun:
+yes">                                        
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>experiment_id='abrupt 4XCO2',<span style="mso-spacerun:
+yes">           </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>institution=<span style="mso-spacerun:
+yes">                                           
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'GICC
+(Generic International Climate Center, ' //<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'Geneva,
+Switzerland)',<span style="mso-spacerun:
+yes">                                
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>source='GICCM1 (2002): ' //<span style="mso-spacerun:
+yes">                            
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>'atmosphere:<span style="mso-spacerun: yes">  </span>GICAM3
+(gicam_0_brnchT_itea_2, T63L32); '// &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'ocean:
+MOM (mom3_ver_3.5.2, 2x3L15); '<span style="mso-spacerun:
+yes">            
+</span>//<span style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'sea ice:
+GISIM4; land: GILSM2.5',<span style="mso-spacerun:
+yes">                     
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>calendar='360_day',<span style="mso-spacerun:
+yes">                                     
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>realization=1,<span style="mso-spacerun:
+yes">                                         
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>history='Output from archive/giccm_03_std_2xCO2_2256.', &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>institute_id = 'PCMDI', &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>comment='Equilibrium reached after 30-year spin-up ' // &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'after
+which data were output starting with nominal '// &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'date of
+January 2030',<span style="mso-spacerun:
+yes">                                
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><span style="mso-spacerun:
+yes">     </span>references='Model described by Koder
+and Tolkien ' //<span style="mso-spacerun: yes">   </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'(J.
+Geophys. Res., 2001, 576-591).<span style="mso-spacerun: yes"> 
+</span>Also '<span style="mso-spacerun:
+yes">        </span>//<span
+style="mso-spacerun: yes">   </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'see
+http://www.GICC.su/giccm/doc/index.html '<span style="mso-spacerun:
+yes">     </span>//<span style="mso-spacerun:
+yes">   </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>' 2XCO2
+simulation described in Dorkey et al. '<span style="mso-spacerun:
+yes">    </span>//<span style="mso-spacerun: yes">  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>'(Clim.
+Dyn., 2003, 323-357.)',&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>model_id='GICCM1',forcing='TO',contact="Barry Bonds",&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>parent_experiment_id="N/A",branch_time=bt)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Define all axes that will be needed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ilat = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table='Tables/CMIP5_Amon',<span style="mso-spacerun:
+yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='latitude',<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='degrees_north',<span style="mso-spacerun:
+yes">        </span>&<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=lat,<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>coord_vals=alats,<span style="mso-spacerun:
+yes">            
+</span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>cell_bounds=bnds_lat)<span style="mso-spacerun:
+yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ilon2 = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table='Tables/CMIP5_Lmon',<span style="mso-spacerun:
+yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='longitude',<span style="mso-spacerun:
+yes">      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=lon,<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='degrees_east',<span style="mso-spacerun:
+yes">         </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>coord_vals=alons,<span style="mso-spacerun:
+yes">            
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>cell_bounds=bnds_lon)<span style="mso-spacerun:
+yes">      </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ilat2 = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>table='Tables/CMIP5_Lmon',<span
+style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='latitude',<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='degrees_north',<span style="mso-spacerun:
+yes">        </span>&<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=lat,<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>coord_vals=alats,<span style="mso-spacerun:
+yes">            
+</span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>cell_bounds=bnds_lat)<span style="mso-spacerun:
+yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ilon = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><span
+style="mso-spacerun: yes">  </span>table='Tables/CMIP5_Amon',<span
+style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='longitude',<span style="mso-spacerun:
+yes">      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=lon,<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='degrees_east',<span style="mso-spacerun:
+yes">         </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>coord_vals=alons,<span style="mso-spacerun:
+yes">            
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>cell_bounds=bnds_lon)<span style="mso-spacerun:
+yes">      </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ipres = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table='Tables/CMIP5_Amon',<span style="mso-spacerun:
+yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='plevs',<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='Pa',<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=lev2,<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>coord_vals=plevs)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>note that the time axis is defined next, but the time
+coordinate <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>values and bounds will be passed to cmor through
+function <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>cmor_write (later, below).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>itim = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table='Tables/CMIP5_Amon',<span style="mso-spacerun:
+yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='time',<span style="mso-spacerun:
+yes">           </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='days since 2030-1-1',<span style="mso-spacerun: yes"> 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=ntimes,<span style="mso-spacerun:
+yes">               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>interval='20 minutes')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>itim2 = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table='Tables/CMIP5_Lmon',<span style="mso-spacerun:
+yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='time',<span style="mso-spacerun:
+yes">           </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='days since 2030-1-1',<span style="mso-spacerun: yes"> 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=ntimes,<span style="mso-spacerun:
+yes">               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>interval='20 minutes')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>define model eta levels (although these must be provided, they will<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">    </span>actually be replaced by a+b before writing the
+netCDF file)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ilev = cmor_axis(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><span style="mso-spacerun:
+yes">     </span>table='Tables/CMIP5_Amon',<span
+style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry='standard_hybrid_sigma',<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='1', &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>length=lev,<span style="mso-spacerun:
+yes">                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>coord_vals=zlevs,<span style="mso-spacerun:
+yes">            
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>cell_bounds=zlev_bnds)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">   </span>define z-factors needed to transform from model level
+to pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>p0 = 1.e5<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1
+/)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>a_coeff_bnds=(/0.,.15, .25, .25, .16,
+0./)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>b_coeff_bnds=(/0.,.05, .15, .35, .65,
+1./)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>error_flag = cmor_zfactor(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><span style="mso-spacerun:
+yes">      </span>zaxis_id=ilev,<span
+style="mso-spacerun:
+yes">                     
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zfactor_name='p0',<span style="mso-spacerun:
+yes">                 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='Pa',<span style="mso-spacerun:
+yes">                        
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zfactor_values = p0)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>error_flag = cmor_zfactor(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zaxis_id=ilev,<span style="mso-spacerun:
+yes">                      
+</span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>zfactor_name='b',<span
+style="mso-spacerun:
+yes">                   
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>axis_ids=
+(/ ilev /),<span style="mso-spacerun:
+yes">               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zfactor_values = b_coeff,<span style="mso-spacerun:
+yes">           
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zfactor_bounds = b_coeff_bnds<span style="mso-spacerun: yes"> 
+</span>)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>error_flag = cmor_zfactor(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zaxis_id=ilev,<span style="mso-spacerun:
+yes">                      
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>zfactor_name='a',<span
+style="mso-spacerun:
+yes">                   
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>axis_ids=
+(/ ilev /),<span style="mso-spacerun:
+yes">               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zfactor_values = a_coeff,<span style="mso-spacerun:
+yes">           
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zfactor_bounds = a_coeff_bnds )<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>zfactor_id = cmor_zfactor(<span
+style="mso-spacerun: yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>zaxis_id=ilev,<span style="mso-spacerun:
+yes">                        
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>zfactor_name='ps',<span
+style="mso-spacerun:
+yes">                    
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>axis_ids=(/ ilon, ilat, itim /),<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units='Pa' )<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Define the only field to be written that is a function of model level<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">    </span>(appearing in IPCC table A1c)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>var3d_ids(1) = cmor_variable(<span
+style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table='Tables/CMIP5_Amon',<span style="mso-spacerun: yes"> 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>table_entry=entry3d(1),<span style="mso-spacerun:
+yes">     </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>units=units3d(1),<span style="mso-spacerun:
+yes">           </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>axis_ids=(/ ilon, ilat, ilev, itim /),<span style="mso-spacerun:
+yes">  </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>missing_value=1.0e28, &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>original_name=varin3d(1))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Define variables appearing in IPCC table A1c that are a function of
+pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">         </span>(3-d variables)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DO m=2,n3d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>var3d_ids(m) =
+cmor_variable(<span style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>table='Tables/CMIP5_Amon',<span style="mso-spacerun: yes"> 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>table_entry=entry3d(m),<span style="mso-spacerun:
+yes">     </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>units=units3d(m),<span style="mso-spacerun:
+yes">           </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          </span>axis_ids=(/
+ilon, ilat, ipres, itim /), &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>missing_value=1.0e28,<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>original_name=varin3d(m))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ENDDO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Define variables appearing in IPCC table A1a (2-d variables)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>DO m=1,n2d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>if (m.ne.3) then<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>var2d_ids(m) =
+cmor_variable(<span style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>table='Tables/CMIP5_Amon',<span style="mso-spacerun:
+yes">      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>table_entry=entry2d(m),<span style="mso-spacerun:
+yes">     </span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>units=units2d(m),<span style="mso-spacerun:
+yes">           </span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          </span>axis_ids=(/
+ilon, ilat, itim /), &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>missing_value=1.0e28,<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          </span>positive=positive2d(m),<span
+style="mso-spacerun: yes">     </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>original_name=varin2d(m))<span style="mso-spacerun: yes">  
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>else<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>var2d_ids(m) =
+cmor_variable(<span style="mso-spacerun: yes">    </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>table='Tables/CMIP5_Lmon',<span style="mso-spacerun:
+yes">      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>table_entry=entry2d(m),<span style="mso-spacerun:
+yes">     </span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>units=units2d(m),<span style="mso-spacerun:
+yes">           </span>& <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          </span>axis_ids=(/
+ilon2, ilat2, itim2 /), &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>missing_value=1.0e28,<span style="mso-spacerun:
+yes">       </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>positive=positive2d(m),<span style="mso-spacerun:
+yes">     </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">         
+</span>original_name=varin2d(m)) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>endif<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ENDDO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>PRINT*, ' '<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>PRINT*, 'completed everything up to
+writing output fields '<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>PRINT*, ' '<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun: yes"> 
+</span>Loop through history files (each containing several different fields, <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">       </span>but only a single month of
+data, averaged over the month).<span style="mso-spacerun: yes"> 
+</span>Then <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">       </span>extract fields of interest and
+write these to netCDF files (with <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>!<span style="mso-spacerun:
+yes">       </span>one field per file, but all
+months included in the loop).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time_loop: DO it=1, ntimes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! In the following
+loops over the 3d and 2d fields, the user-written<span style="mso-spacerun:
+yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! subroutines
+(read_3d_input_files and read_2d_input_files) retrieve <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! the requested IPCC
+table A1c and table A1a fields and store them in <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! data3d and data2d,
+respectively.<span style="mso-spacerun: yes">  </span>In addition a
+user-written code <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! (read_time)
+retrieves the time and time-bounds associated with the <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! time sample (in
+units of 'days since 1970-1-1', consistent with the <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! axis definitions
+above).<span style="mso-spacerun: yes">  </span>The bounds are set to the
+beginning and <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! the end of the
+month retrieved, indicating the averaging period.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! The user must write
+a code to obtain the times and time-bounds for<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>!<span
+style="mso-spacerun: yes">   </span>the time slice.<span
+style="mso-spacerun: yes">  </span>The following line is simply a
+place-holder for<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>!<span
+style="mso-spacerun: yes">   </span>the user's code, which should
+replace it.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>call read_time(it, time(1),
+bnds_time)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>call
+read_3d_input_files(it, varin3d(1), data3d)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>error_flag =
+cmor_write(<span style="mso-spacerun:
+yes">            </span><span
+style="mso-spacerun:
+yes">                      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>var_id<span style="mso-spacerun:
+yes">        </span>= var3d_ids(1),<span
+style="mso-spacerun: yes">                       
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>data<span style="mso-spacerun:
+yes">          </span>=
+data3d,<span style="mso-spacerun: yes">                             
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>ntimes_passed = 1,<span style="mso-spacerun:
+yes">                                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>time_vals<span style="mso-spacerun: yes">    
+</span>= time,<span style="mso-spacerun:
+yes">          </span><span
+style="mso-spacerun:
+yes">                      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>time_bnds<span style="mso-spacerun: yes">    
+</span>= bnds_time<span style="mso-spacerun: yes">   </span>)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>call
+read_2d_input_files(it, varin2d(4), data2d)<span style="mso-spacerun:
+yes">                 
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>error_flag =
+cmor_write(<span style="mso-spacerun:
+yes">                                 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>var_id<span style="mso-spacerun:
+yes">        </span>= zfactor_id,<span
+style="mso-spacerun: yes">                   
+</span><span style="mso-spacerun:
+yes">      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>data<span style="mso-spacerun:
+yes">          </span>=
+data2d,<span style="mso-spacerun: yes">                             
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>ntimes_passed = 1,<span style="mso-spacerun:
+yes">                                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>time_vals<span style="mso-spacerun: yes">    
+</span>= time,<span style="mso-spacerun:
+yes">                               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>time_bnds<span style="mso-spacerun: yes">    
+</span>= bnds_time,<span style="mso-spacerun:
+yes">                    
+</span><span style="mso-spacerun:
+yes">      </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        
+</span>store_with<span style="mso-spacerun: yes">    </span>=
+var3d_ids(1) )<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>! Cycle through the 3-d
+fields (stored on pressure levels), <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>! and retrieve the
+requested variable and append each to the <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>! appropriate netCDF file.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>DO m=2,n3d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+The user must write the code that fills the arrays of data<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+that will be passed to CMOR.<span style="mso-spacerun: yes">  </span>The
+following line is simply a<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>! a
+place-holder for the user's code, which should replace it.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       
+</span>call read_3d_input_files(it, varin3d(m), data3d)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+append a single time sample of data for a single field to <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+the appropriate netCDF file.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       
+</span>call cmor_create_output_path(var3d_ids(m),outpath)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       
+</span>print*, 'Ok we will dump that at: ',outpath<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       
+</span>error_flag = cmor_write(<span style="mso-spacerun:
+yes">    </span><span style="mso-spacerun:
+yes">                              </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>var_id<span style="mso-spacerun:
+yes">        </span>= var3d_ids(m),<span
+style="mso-spacerun: yes">                       
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>data<span style="mso-spacerun:
+yes">          </span>= data3d,<span
+style="mso-spacerun:
+yes">                             
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>ntimes_passed = 1,<span style="mso-spacerun:
+yes">                                  
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>time_vals<span style="mso-spacerun: yes">    
+</span>= time,<span style="mso-spacerun:
+yes">                               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>time_bnds<span style="mso-spacerun: yes">    
+</span>= bnds_time<span style="mso-spacerun: yes">  </span>)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>IF
+(error_flag < 0) THEN<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           </span>!
+write diagnostic messages to standard output device<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          
+</span>write(*,*) ' Error encountered writing IPCC Table A1c ' &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">               
+</span>// 'field ', entry3d(m), ', which I call ', varin3d(m)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          
+</span>write(*,*) ' Was processing time sample: ', time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>END
+IF<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! Cycle through the
+2-d fields, retrieve the requested variable and <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>! append each to the
+appropriate netCDF file.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>DO m=1,n2d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+The user must write the code that fills the arrays of data<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+that will be passed to CMOR.<span style="mso-spacerun: yes">  </span>The
+following line is simply a<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>! a
+place-holder for the user's code, which should replace it.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       
+</span>call read_2d_input_files(it, varin2d(m), data2d)<span
+style="mso-spacerun:
+yes">                 
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+append a single time sample of data for a single field to <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>!
+the appropriate netCDF file.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>error_flag
+= cmor_write(<span style="mso-spacerun:
+yes">                                 
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>var_id<span style="mso-spacerun:
+yes">        </span>= var2d_ids(m),<span
+style="mso-spacerun: yes">                       
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>data<span style="mso-spacerun:
+yes">          </span>= data2d,<span
+style="mso-spacerun:
+yes">                             
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>ntimes_passed = 1,<span style="mso-spacerun:
+yes">                             
+</span><span style="mso-spacerun:
+yes">     </span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>time_vals<span style="mso-spacerun: yes">    
+</span>= time,<span style="mso-spacerun: yes">                               
+</span>&<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">            
+</span>time_bnds<span style="mso-spacerun: yes">    
+</span>= bnds_time<span style="mso-spacerun: yes">  </span>)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>IF
+(error_flag < 0) THEN<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           </span>!
+write diagnostic messages to standard output device<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          
+</span>write(*,*) ' Error encountered writing IPCC Table A1a ' &<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">               
+</span>// 'field ', entry2d(m), ', which I call ', varin2d(m)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          
+</span>write(*,*) ' Was processing time sample: ', time <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>END
+IF<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>END DO<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>END DO time_loop<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><span style="mso-spacerun:
+yes"> </span>!<span style="mso-spacerun: yes">   </span>Close
+all files opened by CMOR.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>error_flag = cmor_close()<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>print*, ' '<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>print*,
+'******************************'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>print*, ' '<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>print*, 'ipcc_test_code executed to
+completion '<span style="mso-spacerun: yes">   </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>print*, ' '<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>print*,
+'******************************'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>END
+PROGRAM ipcc_test_code<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<h2><a name="_Toc129422036"></a><a name="_Toc134007334"><span style='mso-bookmark:
+_Toc129422036'>C</span></a><span style='mso-bookmark:_Toc129422036'></span></h2>
+
+<h3><span style='mso-bookmark:_Toc129422036'><a name="_Toc134007335">Sample
+Program 1: grids</a></span></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p> </o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#include
+<time.h><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#include
+<stdio.h><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#include<string.h><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#include
+"cmor.h"<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#include
+<stdlib.h><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#include
+<math.h><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>void
+read_time(it, time, time_bnds)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>int it;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>double time[];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>double time_bnds[];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>{<span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time[0] = (it-0.5)*30.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time_bnds[0] = (it-1)*30.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time_bnds[1] = it*30.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time[0]=it;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time_bnds[0] = it;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>time_bnds[1] = it+1;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>void
+read_3d_input_files(it, varname, field,n0,n1,n2)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>int it,n0,n1,n2;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span>char *varname;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><span style="mso-spacerun:
+yes">    </span>double field[];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>{<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int i,j,k;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>float factor,offset;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>if
+(strcmp(varname,"CLOUD")==0) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>factor = 0.1;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = -50.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>else if
+(strcmp(varname,"U")==0) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>factor = 1.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = 100.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>else if
+(strcmp(varname,"T")==0) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><span style="mso-spacerun:
+yes">  </span>factor = 0.5;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = -150.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for (k=0;k<n2;k++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>for (j=0;j<n1;j++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>for
+(i=0;i<n0;i++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       
+</span>field[k*(n0*n1)+j*n0+i] = (k*64 + j*16 + i*4 + it)*factor - offset;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>void
+read_2d_input_files(it, varname, field, n0, n1)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int it,n0,n1;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>char *varname;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double field[];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>{<span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int i, j,k;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double factor, offset;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double tmp;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>if
+(strcmp(varname,"LATENT")==0){<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>factor = 1.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = 120.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>else if
+(strcmp(varname,"TSURF")==0){<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>factor = 2.0;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = -230.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>else if
+(strcmp(varname,"SOIL_WET")==0){<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>factor = 10.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = 0.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>else if
+(strcmp(varname,"PSURF")==0){<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>factor = 1.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>offset = -9.7e2;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for (j=0;j<n0;j++){<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>for (i=0;i<n1;i++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>tmp = ((double)j*16.
++ (double)(i)*4. + (double)it)*factor - offset;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>k=
+(n0-1-j)*n1+i;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>field[k] = tmp;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>int
+main()<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>{<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/*<span style="mso-spacerun:
+yes">   </span>dimension parameters: */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/* --------------------------------- */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define<span
+style="mso-spacerun: yes">   </span>ntimes<span style="mso-spacerun:
+yes">  </span>2<span style="mso-spacerun: yes">   
+</span>/* number of time samples to process */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define<span
+style="mso-spacerun: yes">   </span>lon<span style="mso-spacerun:
+yes">  </span>3<span style="mso-spacerun:
+yes">       </span>/* number of longitude grid
+cells<span style="mso-spacerun: yes">   </span>*/<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define<span
+style="mso-spacerun: yes">   </span>lat<span style="mso-spacerun:
+yes">  </span>4<span style="mso-spacerun:
+yes">       </span>/* number of latitude grid
+cells */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define<span
+style="mso-spacerun: yes">   </span>lev<span style="mso-spacerun:
+yes">  </span>5<span style="mso-spacerun:
+yes">       </span>/* number of standard pressure
+levels */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double x[lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double y[lat];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double lon_coords[lon*lat];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double lat_coords[lon*lat];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double lon_vertices[lon*lat*4];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double lat_vertices[lon*lat*4];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double data2d[lat*lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double data3d[lev*lat*lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int myaxes[10];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int mygrids[10];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int myvars[10];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int tables[4];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int axes_ids[CMOR_MAX_DIMENSIONS];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int i,j,k,ierr;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double Time[ntimes];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double<span style="mso-spacerun:
+yes">  </span>bnds_time[ntimes*2];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double tolerance=1.e-4;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double lon0 = <span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">280</ins></span>.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double lat0=0.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double delta_lon = 10.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double delta_lat = 10.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>char id[CMOR_MAX_STRING];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><span style="mso-spacerun: yes"> 
+</span>double tmpf=0.;<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define
+nparam 6 /* number of grid parameters */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define
+lparam 40<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>#define
+lunits 14<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>char params[nparam][lparam] =
+{"standard_parallel1","longitude_of_central_meridian","latitude_of_projection_origin","false_easting","false_northing","standard_parallel2"};<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>char punits[nparam][lunits] =
+{"degrees_north","degrees_east","degrees_north","m","m","degrees_north"};<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>//char punits[nparam][lunits] =
+{"","","","","",""};<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>double pvalues[nparam] =
+{-20.,175.,13.,8.,0.,20};<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>int exit_mode;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/* first construct grid lon/lat */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for (j=0;j<lat;j++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>y[j]=j;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>for (i=0;i<lon;i++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>x[i]=i;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lon_coords[i+j*lon] = lon0+delta_lon*(j+1+i);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lat_coords[i+j*lon] = lat0+delta_lat*(j+1-i);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>/* vertices
+lon*/<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>k =
+i*4+j*lon*4+0;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>printf("i,j,k:
+%i, %i, %i\n",i,j,k);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lon_vertices[i*4+j*lon*4+0] = lon_coords[i+j*lon]-delta_lon;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lon_vertices[i*4+j*lon*4+1] = lon_coords[i+j*lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lon_vertices[i*4+j*lon*4+2] = lon_coords[i+j*lon]+delta_lon;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lon_vertices[i*4+j*lon*4+3] = lon_coords[i+j*lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>/* vertices lat
+*/<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lat_vertices[i*4+j*lon*4+0] = lat_coords[i+j*lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lat_vertices[i*4+j*lon*4+1] = lat_coords[i+j*lon]-delta_lat;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lat_vertices[i*4+j*lon*4+2] = lat_coords[i+j*lon];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     
+</span>lat_vertices[i*4+j*lon*4+3] = lat_coords[i+j*lon]+delta_lat;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>exit_mode = CMOR_EXIT_ON_MAJOR;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>j = CMOR_REPLACE;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok init cmor,
+%i\n",exit_mode);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_setup(NULL,&j,NULL,&exit_mode,NULL,NULL);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok init
+cmor\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><span style="mso-spacerun:
+yes"> </span>int tmpmo[12];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr = cmor_dataset(<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"Test",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"amip",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"GICC (Generic International Climate Center, Geneva,
+Switzerland)",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"GICCM1 (2002): atmosphere:<span style="mso-spacerun: yes"> 
+</span>GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2,
+2x3L15); sea ice: GISIM4; land: GILSM2.5",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"standard",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>1,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"Rusty Koder (koder at middle_earth.net)",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"Output from archive/giccm_03_std_2xCO2_2256.",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"Equilibrium reached after 30-year spin-up after which data were
+output starting with nominal date of January 2030",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      
+</span>"Model described by Koder and Tolkien (J. Geophys. Res., 2001,
+576-591).<span style="mso-spacerun: yes">  </span>Also see
+http://www.GICC.su/giccm/doc/index.html<span style="mso-spacerun: yes"> 
+</span>2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003,
+323-357.)",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>0,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">     </span><span
+style="mso-spacerun: yes">  </span>0,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span>tmpmo,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><span style="mso-spacerun:
+yes">      
+</span>"GICCM1\0","N/A",0,0,"GICC","N/A",&tmpf);<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok load cmor
+table(s)\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_load_table("Tables/CMIP5_Amon",&tables[1]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok load cmor
+table(s)\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>//ierr = cmor_load_table("Test/IPCC_test_table_Grids",&tables[0]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_load_table("Tables/CMIP5_grids",&tables[0]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok load cmor
+table(s)\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr = cmor_set_table(tables[0]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/* first define grid axes
+(x/y/rlon/rlat,etc... */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr = cmor_axis(&myaxes[0],"x","m",lon,&x[0],'d',NULL,0,NULL);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok got axes id:
+%i for 'x'\n",myaxes[0]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_axis(&myaxes[1],"y","m",lat,&y[0],'d',NULL,0,NULL);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: ok got axes id:
+%i for 'y'\n",myaxes[1]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>axes_ids[0] = myaxes[1];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>axes_ids[1] = myaxes[0];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/*now defines the grid */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("going to grid stuff
+\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";
+mso-bidi-font-family:"Courier New"'><span style="mso-spacerun: yes"> 
+</span>ierr = cmor_grid(&mygrids[0],2,&axes_ids[0],'d',&lat_coords[0],&lon_coords[0],4,&lat_vertices[0],&lon_vertices[0]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for (i=0;i<cmor_grids[0].ndims;i++)
+{<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>printf("Dim : %i the
+grid has the follwoing axes on itself: %i
+(%s)\n",i,cmor_grids[0].axes_ids[i],cmor_axes[cmor_grids[0].axes_ids[i]].id);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/* ok puts some grid mappings in
+it,<span style="mso-spacerun: yes">  </span>not sure these parmeters make
+sens! */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for(i=0;i<nparam;i++) printf("Test
+code: ok paramter: %i is: %s, with value %lf and units
+'%s'\n",i,params[i],pvalues[i],punits[i]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("back from grid going to
+mapping \n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_set_grid_mapping(mygrids[0],"lambert_conformal_conic",nparam-1,&params[0],lparam,pvalues,&punits[0],lunits);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for (i=0;i<cmor_grids[0].ndims;i++)
+{<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>printf("New Dim : %i
+the grid has the follwoing axes on itself: %i
+(%s)\n",i,cmor_grids[0].axes_ids[i],cmor_axes[cmor_grids[0].axes_ids[i]].id);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>/* ok sets back the vars table */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>cmor_set_table(tables[1]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for(i=0;i<ntimes;i++) read_time(i,
+&Time[i], &bnds_time[2*i]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_axis(&myaxes[3],"time","months since
+1980",2,&Time[0],'d',&bnds_time[0],2,NULL);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("time axis id:
+%i\n",myaxes[3]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>axes_ids[0]=myaxes[3]; /*time*/<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>axes_ids[1]=mygrids[0]; /*grid */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: sending
+axes_ids: %i %i\n",axes_ids[0],axes_ids[1]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr =
+cmor_variable(&myvars[0],"hfls","W
+m-2",2,axes_ids,'d',NULL,&tolerance,"down","HFLS","no
+history","no future");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>for (i=0;i<ntimes;i++) {<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>printf("Test code:
+writing time: %i of %i\n",i+1,ntimes);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>printf("Test code:
+2d\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>read_2d_input_files(i,
+"LATENT", &data2d[0],lat,lon);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>//for(j=0;j<10;j++)
+printf("Test code: %i out of %i : %lf\n",j,9,data2d[j]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>printf("var id:
+%i\n",myvars[0]);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>ierr =
+cmor_write(myvars[0],&data2d,'d',NULL,1,NULL,NULL,NULL);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("ok loop done\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>ierr = cmor_close();<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>printf("Test code: done\n");<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">  </span>return 0;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<h2><a name="_Toc129422037"></a><a name="_Toc134007336"><span style='mso-bookmark:
+_Toc129422037'>PYTHON</span></a></h2>
+
+<h3><a name="_Toc129422038"></a><a name="_Toc134007337"><span style='mso-bookmark:
+_Toc129422038'>Sample Program 1</span></a></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>import
+cmor<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.setup(inpath='Tables',netcdf_file_action=cmor.CMOR_REPLACE)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.dataset('historical',
+'ukmo', <span class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">'HadCM3'HadCM3 (2010)</ins></span>', '360_day',model_id=<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">'pcmdi-10b'’HadCM3'</ins></span>,forcing=<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">'co2')'Nat',</ins></span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:9.0pt;
+font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">parent_experiment_id=’N/A’,branch_time=0.,contact=’Tim
+Lincecum, timmy at sfgiants.com’,</ins></span></span><span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46"> </ins></span><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">institute_id='pcmdi')<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>table='CMIP5_Amon'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.load_table(table)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>itime
+= cmor.axis(table_entry= 'time',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                 
+</span>units= 'days since 2000-01-01 00:00:00',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                 
+</span>coord_vals= [15,],<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                 
+</span>cell_bounds= [0, 30])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ilat
+= cmor.axis(table_entry= 'latitude',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                
+</span>units= 'degrees_north',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                
+</span>coord_vals= [0],<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                
+</span>cell_bounds= [-1, 1])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ilon
+= cmor.axis(table_entry= 'longitude',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                
+</span>units= 'degrees_east',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                
+</span>coord_vals= [90],<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                
+</span>cell_bounds= [89, 91])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_ids
+= [itime,ilat,ilon]<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">             
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>varid
+= cmor.variable('ts', 'K', axis_ids)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.write(varid,
+[273])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>path=cmor.close(varid,
+file_name=True)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>print
+path<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.close()<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<h3><a name="_Toc129422039"></a><a name="_Toc134007338"><span style='mso-bookmark:
+_Toc129422039'>Sample Program 2: grids</span></a><span style='mso-bookmark:
+_Toc129422039'></span><span style='mso-bookmark:_Toc134007338'></span><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p></o:p></span></h3>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>import
+cmor<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>import
+os<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>def
+gen_irreg_grid(lon,lat):<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>lon0 = -120.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>lat0=0.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>delta_lon = 10.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>delta_lat = 10.;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>y = numpy.arange(lat)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>x = numpy.arange(lon)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>lon_coords =
+numpy.zeros((lat,lon))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>lat_coords =
+numpy.zeros((lat,lon))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>lon_vertices =
+numpy.zeros((lat,lon,4))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>lat_vertices =
+numpy.zeros((lat,lon,4))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>for j in range(lat): #
+really porr coding i know<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span>for
+i in range(lon): # getting worse i know<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lon_coords[j,i] = lon0+delta_lon*(j+1+i);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span><span
+style="mso-spacerun: yes">     </span>lat_coords[j,i]
+= lat0+delta_lat*(j+1-i);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lon_vertices[j,i,0] = lon_coords[j,i]-delta_lon;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lon_vertices[j,i,1] = lon_coords[j,i];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lon_vertices[j,i,2] = lon_coords[j,i]+delta_lon;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lon_vertices[j,i,3] = lon_coords[j,i];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>##
+!!$<span style="mso-spacerun: yes">      </span>/*
+vertices lat */<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lat_vertices[j,i,0] = lat_coords[j,i];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lat_vertices[j,i,1] = lat_coords[j,i]-delta_lat;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lat_vertices[j,i,2] = lat_coords[j,i];<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">           
+</span>lat_vertices[j,i,3] = lat_coords[j,i]+delta_lat;<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>return
+x,y,lon_coords,lat_coords,lon_vertices,lat_vertices<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p> </o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p> </o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p> </o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>pth
+= os.path.split(os.path.realpath(os.curdir))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>if
+pth[-1]=='Test':<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>ipth = opth = '.'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>else:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>ipth = opth = 'Test'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myaxes=numpy.zeros(9,dtype='i')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myaxes2=numpy.zeros(9,dtype='i')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myvars=numpy.zeros(9,dtype='i')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.setup(inpath=ipth,set_verbosity=cmor.CMOR_NORMAL,
+netcdf_file_action = cmor.CMOR_REPLACE, exit_control =
+cmor.CMOR_EXIT_ON_MAJOR);<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.dataset(<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>outpath = opth,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>experiment_id = "<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">historical</ins></span>",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>institution = "GICC
+(Generic International Climate Center, Geneva, Switzerland)",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>source = "GICCM1 <span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">(</ins></span>2002<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">)</ins></span>:
+atmosphere:<span style="mso-spacerun: yes">  </span>GICAM3
+(gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice:
+GISIM4; land: GILSM2.5",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>calendar = "standard",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>realization = 1,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>contact = "Rusty Koder
+(koder at middle_earth.net)",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>history = "Output from
+archive/giccm_03_std_2xCO2_2256.",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>comment = "Equilibrium
+reached after 30-year spin-up after which data were output starting with
+nominal date of January 2030",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>references = "Model
+described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).<span
+style="mso-spacerun: yes">  </span>Also see
+http://www.GICC.su/giccm/doc/index.html<span style="mso-spacerun: yes"> 
+</span>2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003,
+323-357.)",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>leap_year=0,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>leap_month=0,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>month_lengths=None,<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><span style="mso-spacerun: yes">   
+</span></ins></span>model_id="<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">GICCM1",<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><span style="mso-spacerun: yes">   
+</span></ins></span>forcing="<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">Ant,
+Nat",</ins></span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><span style="mso-spacerun: yes">   
+</span>institute_id="pcmdi",<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><span style="mso-spacerun: yes">   
+</span>parent_experiment_id="piControl",branch_time=18336.33)<o:p></o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>tables=[]<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>a
+= cmor.load_table("<span class=msoIns><ins
+cite="mailto:Charles%20Samir%20Doutriaux" datetime="2010-04-27T11:46">Tables/CMIP5_grids</ins></span>")<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>tables.append(a)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>tables.append(cmor.load_table("<span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">Tables/CMIP5_Amon</ins></span>"))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>print
+'Tables ids:',tables<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.set_table(tables[0])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>x,y,lon_coords,lat_coords,lon_vertices,lat_vertices
+= gen_irreg_grid(lon,lat)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myaxes[0]
+= cmor.axis(table_entry = 'y', <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>units = <span class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">'m'</ins></span>, <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">      </span><span
+style="mso-spacerun:
+yes">                </span>coord_vals
+= y)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myaxes[1]
+= cmor.axis(table_entry = 'x', <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>units = <span class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46">'m'</ins></span>, <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>coord_vals = x)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>grid_id
+= cmor.grid(axis_ids = myaxes[:2], <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                   
+</span>latitude = lat_coords, <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                  
+</span><span style="mso-spacerun: yes"> </span>longitude = lon_coords, <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                   
+</span>latitude_vertices = lat_vertices, <o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                   
+</span>longitude_vertices = lon_vertices)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>print
+'got grid_id:',grid_id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myaxes[2]
+= grid_id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>mapnm
+= 'lambert_conformal_conic'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>params
+= [ "standard_parallel1",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">   </span><span style="mso-spacerun:
+yes">        </span>"longitude_of_central_meridian","latitude_of_projection_origin",<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">          
+</span>"false_easting","false_northing","standard_parallel2"
+]<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>punits
+=
+["","","","","",""
+]<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>pvalues
+= [-20.,175.,13.,8.,0.,20. ]<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.set_grid_mapping(grid_id=myaxes[2],<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">        </span><span
+style="mso-spacerun:
+yes">              </span>mapping_name
+= mapnm,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>parameter_names = params,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>parameter_values = pvalues,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                     
+</span>parameter_units = punits)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.set_table(tables[1])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myaxes[3]
+= cmor.axis(table_entry = 'time',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">   </span><span style="mso-spacerun:
+yes">                   </span>units
+= 'months since 1980')<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>pass_axes
+= [myaxes[3],myaxes[2]]<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>myvars[0]
+= cmor.variable( table_entry = 'hfls',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>units = 'W m-2',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>axis_ids = pass_axes,<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>positive = 'down',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>original_name = 'HFLS',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>history = 'no history',<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>comment = 'no future'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                          
+</span>)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>for
+i in range(ntimes):<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>data2d =
+read_2d_input_files(i, varin2d[0], lat,lon)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>print 'writing time:
+',i,data2d.shape,data2d<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">    </span>print
+Time[i],bnds_time[2*i:2*i+2]<span style="mso-spacerun: yes">   
+</span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">   
+</span>cmor.write(myvars[0],data2d,1, time_vals=Time[i],time_bnds=bnds_time[2*i:2*i+2])<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor.close()<o:p></o:p></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p> </o:p></ins></span></span></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><span
+class=msoIns><ins cite="mailto:Charles%20Samir%20Doutriaux"
+datetime="2010-04-27T11:46"><o:p> </o:p></ins></span></p>
+
+<b><span style='font-size:16.0pt;font-family:Arial;mso-fareast-font-family:
+"Times New Roman";mso-bidi-font-family:Arial;mso-font-kerning:16.0pt;
+mso-ansi-language:EN-US;mso-fareast-language:EN-US'><br clear=ALL
+style='page-break-before:always'>
+</span></b>
+
+<h1><a name="_Toc129422040"></a><a name="_Toc134007339"><span style='mso-bookmark:
+_Toc129422040'>Appendix D: MIP Tables</span></a></h1>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><b
+style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<h2><a name="_Toc129422041"></a><a name="_Toc134007340"><span style='mso-bookmark:
+_Toc129422041'>CMOR 1 sample</span></a></h2>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><b
+style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><b
+style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt'>Sample Portion
+of a MIP Table (which will be made available by MIP organizers to contributing
+groups)<o:p></o:p></span></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><b
+style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt'><o:p> </o:p></span></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><b
+style='mso-bidi-font-weight:normal'><i style='mso-bidi-font-style:normal'>The
+user normally need not be concerned with the details contained in this table.<o:p></o:p></i></b></p>
+
+<p class=MsoNormal style='margin-left:.5in;text-indent:-.5in'><b
+style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt'><span
+style="mso-spacerun: yes"> </span><o:p></o:p></span></b></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor_version:
+0.8<span style="mso-spacerun:
+yes">         </span>! version of CMOR
+that can read this table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cf_version:<span
+style="mso-spacerun: yes">   </span>1.0<span style="mso-spacerun:
+yes">         </span>! version of CF
+that output conforms to<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>project_id:<span
+style="mso-spacerun: yes">   </span>IPCC Fourth Assessment<span
+style="mso-spacerun: yes">       </span>! project
+id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>table_id:<span
+style="mso-spacerun: yes">     </span>Table A1<span
+style="mso-spacerun: yes">    </span>! table id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>table_date:<span
+style="mso-spacerun: yes">   </span>7 April 2004 ! date this table
+was constructed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'pre-industrial control experiment'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'present-day control experiment'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'climate of the 20th Century
+experiment (20C3M)'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'committed climate change
+experiment'<span style="mso-spacerun: yes">  </span>! official name(s) of <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'SRES A2 experiment'<span
+style="mso-spacerun:
+yes">                  
+</span>!<span style="mso-spacerun: yes">  </span>project's experiments<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'control experiment (for
+committed climate change experiment)'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'720 ppm stabilization experiment
+(SRES A1B)'<span style="mso-spacerun: yes">    </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'550 ppm stabilization experiment
+(SRES B1)'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'1%/year CO2 increase experiment
+(to doubling)'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'1%/year CO2 increase experiment
+(to quadrupling)'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'slab ocean control experiment'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'2xCO2 equilibrium experiment'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:<span
+style="mso-spacerun: yes">   </span>'AMIP experiment'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>magic_number:
+-1<span style="mso-spacerun:
+yes">          </span>! used to
+check whether this file has been <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>altered from the
+official version.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>should be set to
+number of non-blank <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>characters in file.
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>approx_interval:<span
+style="mso-spacerun: yes">  </span>30.<span style="mso-spacerun:
+yes">     </span>! approximate spacing between successive
+time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>samples (in units
+of the output time <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>coordinate.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>missing_value:
+1.e20<span style="mso-spacerun: yes">      </span>!
+value used to indicate a missing value<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>in arrays output by
+netCDF as 32-bit IEEE <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>floating-point
+numbers (float or real)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+SUBROUTINE ARGUMENT DEFAULT INFORMATION<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>set default specifications for
+subroutine arguments to:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    
+</span>required/indeterminate/optional/ignored/forbidden<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>(indeterminate may or may
+not be required information, but is not always<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">     </span>required as an
+argument of the function call)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>subroutine_entry:
+cmor_axis<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>required:
+table axis_name units length coord_vals cell_bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ignored:
+interval<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>subroutine_entry:
+cmor_variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>required:
+table table_entry units axis_ids<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>indeterminate:
+missing_value<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>optional:
+tolerance original_name history comment<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ignored:
+positive<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>subroutine_entry:
+cmor_write<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>required:<span
+style="mso-spacerun: yes">  </span>var_id data <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>indeterminate:
+ntimes_passed time_vals time_bnds store_with<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>optional:
+file_suffix<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>TEMPLATE FOR AXES<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!axis_entry:<span
+style="mso-spacerun:
+yes">              
+</span>! (required)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_axis <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>acceptable arguments
+include units length coord_vals cell_bounds interval<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!required:<span
+style="mso-spacerun:
+yes">                 
+</span>! (default: table axis_name units length<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun:
+yes">                                       
+</span>coord_vals cell_bounds)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!indeterminate:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!optional:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!ignored:<span
+style="mso-spacerun:
+yes">                  
+</span>! (default: interval)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!forbidden:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!standard_name:<span
+style="mso-spacerun:
+yes">            
+</span>! (required)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!units:<span
+style="mso-spacerun:
+yes">                    
+</span>! (required)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!axis:<span
+style="mso-spacerun:
+yes">                     
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!positive:<span
+style="mso-spacerun: yes">       </span><span
+style="mso-spacerun:
+yes">           </span>!
+up or down (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!long_name:<span
+style="mso-spacerun:
+yes">                
+</span>! (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!out_name:<span
+style="mso-spacerun:
+yes">               
+</span>! (default: same as axis_entry) <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!type:<span
+style="mso-spacerun:
+yes">                   
+</span>! double (default), real, character, integer<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!stored_direction:<span
+style="mso-spacerun: yes">        </span>!
+increasing (default) or decreasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!valid_min:<span
+style="mso-spacerun:
+yes">              
+</span>! type: double precision (default: no check performed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!valid_max:<span
+style="mso-spacerun:
+yes">              
+</span>! type: double precision (default: no check performed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!requested:<span
+style="mso-spacerun:
+yes">              
+</span>! space-separated list of requested coordinates <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">      
+</span>(default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!requested_bounds:<span
+style="mso-spacerun: yes">        </span>!
+space-separated list of requested coordinate bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">      
+</span>(default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!tol_on_requests:<span
+style="mso-spacerun: yes">        
+</span>! fractional tolerance for meeting request<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">  </span>(default=1.e-3, which is
+used in the formula:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">     </span>eps
+=<span style="mso-spacerun: yes">  </span>MIN(( tol*interval between
+grid-points)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">         
+</span>and (1.e-3*tol*coordinate value)))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!value:<span
+style="mso-spacerun:
+yes">                  
+</span>! of scalar (singleton) dimension <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!bounds_values:<span
+style="mso-spacerun:
+yes">           </span>! of
+scalar (singleton) dimension bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>TEMPLATE FOR VARIABLES<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!variable_entry:<span
+style="mso-spacerun:
+yes">               
+</span>! (required)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">       
+</span>acceptable arguments include<span style="mso-spacerun: yes"> 
+</span>file_suffix missing_value tolerance <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun:
+yes">                              
+</span>original_name history comment positive<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!required:<span
+style="mso-spacerun:
+yes">                  
+</span>! (default: table table_entry units axis_ids)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!indeterminate:<span
+style="mso-spacerun:
+yes">             
+</span>! (default: file_suffix missing_value)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!optional:<span
+style="mso-spacerun:
+yes">                  
+</span>! (default: original_name history comment)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!ignored:<span
+style="mso-spacerun:
+yes">                   
+</span>! (default: positive)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!forbidden:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!standard_name:<span
+style="mso-spacerun:
+yes">             
+</span>! (required)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!units:<span
+style="mso-spacerun:
+yes">                     
+</span>! (required)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!cell_methods:<span
+style="mso-spacerun:
+yes">              
+</span>! (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!long_name:<span
+style="mso-spacerun:
+yes">                 
+</span>! (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!comment:<span
+style="mso-spacerun:
+yes">                   
+</span>! (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!dimensions:<span
+style="mso-spacerun:
+yes">                
+</span>! (required)<span style="mso-spacerun: yes">  </span>(scalar
+dimension(s) should appear<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                            
+</span>!<span style="mso-spacerun: yes">     
+</span>last in list)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!out_name:<span
+style="mso-spacerun: yes">   </span><span style="mso-spacerun:
+yes">                </span>!
+(default: variable_entry)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!type:<span
+style="mso-spacerun:
+yes">                      
+</span>! real (default), double, integer <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!positive:<span
+style="mso-spacerun:
+yes">                  
+</span>! up or down (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!valid_min:<span
+style="mso-spacerun:
+yes">                 
+</span>! type: real (default: no check performed)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!valid_max:
+<span style="mso-spacerun:
+yes">                 </span>!
+type: real (default: no check performed)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!ok_min_mean_abs:<span
+style="mso-spacerun:
+yes">           
+</span>! type: real (default: no check performed)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!ok_max_mean_abs:<span
+style="mso-spacerun:
+yes">           
+</span>! type: real (default: no check performed)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+AXIS INFORMATION<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+longitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>longitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>degrees_east<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>X<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>longitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lon<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>0.<span style="mso-spacerun:
+yes">           </span>! CMOR
+will add n*360 to input values<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                              
+</span>! (where n is an integer) to ensure <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                              
+</span>!<span style="mso-spacerun: yes">  </span>longitudes are in proper
+range.<span style="mso-spacerun: yes">  </span>The<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                              
+</span>!<span style="mso-spacerun: yes">  </span>data will also be
+rearranged <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                            
+</span><span style="mso-spacerun: yes">  </span>!<span
+style="mso-spacerun: yes">  </span>appropriately.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>360.<span style="mso-spacerun:
+yes">         </span>!<span
+style="mso-spacerun: yes">  </span>see above comment.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!=============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!=============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>degrees_north<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Y<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lat<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>-90.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>90.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_axis <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>required:
+interval<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>indeterminate:
+coord_vals cell_bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>days since ?<span style="mso-spacerun: yes">   
+</span>!<span style="mso-spacerun: yes">  </span>the user's basetime will
+be used<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>T<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_axis <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ignored:
+cell_bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>air_pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>Pa <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">       </span><span
+style="mso-spacerun: yes">  </span>down<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>plev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>110000.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>requested:<span
+style="mso-spacerun: yes">       
+</span>10000. 20000. 30000. 40000. 50000.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+height1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_axis <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ignored:
+cell_bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>up<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>10.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>value:<span
+style="mso-spacerun:
+yes">           
+</span>2.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+height2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_axis <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ignored:
+cell_bounds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>up<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>30.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>value:<span
+style="mso-spacerun:
+yes">           
+</span>10.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+depth1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>depth<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>down<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>depth<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">       </span><span
+style="mso-spacerun: yes">  </span>depth<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>1.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>value:<span
+style="mso-spacerun:
+yes">           
+</span>0.05<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>bounds_values:<span
+style="mso-spacerun: yes">    </span>0.0 0.1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+VARIABLE INFORMATION<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+tas<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">   </span>air_temperature<span
+style="mso-spacerun: yes">     </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           </span>K<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">    </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       </span>Surface
+Air Temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       </span>longitude
+latitude time height1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>200.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>340.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_min_mean_abs:<span
+style="mso-spacerun: yes">  </span>270.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_max_mean_abs:<span
+style="mso-spacerun: yes">  </span>300.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+hfls<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">    </span>Override default argument
+specifications for cmor_variable<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>required:
+positive<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:
+upward_surface_latent_heat_flux<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun: yes">        
+</span>W m-2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">  </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">     </span>Surface Latent Heat
+Flux<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       </span>longitude
+latitude time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>up<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>-50.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>300.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_min_mean_abs:<span
+style="mso-spacerun: yes">  </span>20.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_max_mean_abs:<span
+style="mso-spacerun: yes">  </span>150.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+mrsos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:
+moisture_content_of_soil_layer<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun: yes">        
+</span>kg m-2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">  </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">     </span>Moisture in Upper 0.1
+m of Soil Column<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun: yes">        
+</span>includes subsurface frozen water but not surface snow and ice <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       </span>longitude
+latitude time depth1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span> <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+ua<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:
+eastward_wind<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun: yes">        
+</span>m s-1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">  </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">     </span>Zonal Wind Component<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       </span>longitude
+latitude pressure time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>-200.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>300.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_min_mean_abs:<span
+style="mso-spacerun: yes">  </span>0.1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_max_mean_abs:<span
+style="mso-spacerun: yes">  </span>100.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+ta<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:
+air_temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun: yes">        
+</span>K<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">  </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">     </span>Temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       </span>longitude
+latitude pressure time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>150.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>350.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_min_mean_abs:<span
+style="mso-spacerun: yes">  </span>200.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_max_mean_abs:<span
+style="mso-spacerun: yes">  </span>300.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+pr<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">  </span>precipitation<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">          </span>kg m-2 s-1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">   </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">      </span>Precipitation<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun: yes">       
+</span>includes all types (rain, snow, large-scale, convective, etc.)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>longitude latitude time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+lang=DE style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:
+"Courier New";mso-ansi-language:DE'>valid_min:<span style="mso-spacerun:
+yes">          </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+lang=DE style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:
+"Courier New";mso-ansi-language:DE'>valid_max:<span style="mso-spacerun:
+yes">          </span>1.e-4<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+lang=DE style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:
+"Courier New";mso-ansi-language:DE'>ok_min_mean_abs:<span style="mso-spacerun:
+yes">    </span>1.e-6<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_max_mean_abs:<span
+style="mso-spacerun: yes">    </span>5.e-5 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+cl<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">  </span>cloud_area_fraction<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">          </span>%<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">   </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">      </span>Total Cloud
+Fraction<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>longitude latitude zlevel time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun:
+yes">          </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun:
+yes">          </span>100.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_min_mean_abs:<span
+style="mso-spacerun: yes">    </span>10.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>ok_max_mean_abs:<span
+style="mso-spacerun: yes">    </span>90.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<h2><a name="_Toc129422042"></a><a name="_Toc134007341"><span style='mso-bookmark:
+_Toc129422042'>CMOR 2 (table excerpts)</span></a></h2>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";
+mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>table_id:
+Table Amon<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:
+atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>frequency:
+mon<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cmor_version:
+2.0<span style="mso-spacerun:
+yes">         </span>! version of CMOR
+that can read this table<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cf_version:<span
+style="mso-spacerun: yes">   </span>1.4<span style="mso-spacerun:
+yes">         </span>! version of CF
+that output conforms to<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>project_id:<span
+style="mso-spacerun: yes">   </span>CMIP5<span style="mso-spacerun:
+yes">  </span>! project id<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>table_date:<span
+style="mso-spacerun: yes">   </span>04 March 2010 ! date this table
+was constructed<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>missing_value:
+1.e20<span style="mso-spacerun: yes">      </span>!
+value used to indicate a missing value<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>in arrays output by
+netCDF as 32-bit IEEE <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes">       </span><span
+style="mso-spacerun:
+yes">                   </span>!<span
+style="mso-spacerun: yes">   </span>floating-point numbers (float or
+real)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>baseURL:
+http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>product:
+output<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>required_global_attributes:
+creation_date tracking_id forcing model_id parent_experiment_id branch_time
+contact institute_id ! space separated required global attribute<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";
+mso-bidi-font-family:"Courier New"'>forcings:<span style="mso-spacerun:
+yes">   </span>N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD
+OC AA<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'10- or 30-year run initialized in year XXXX' 'decadalXXXX'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'volcano-free hindcasts XXXX' 'noVolcXXXX'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'prediction with 2010 volcano' 'volcIn2010'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'pre-industrial control' 'piControl'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'Historical' 'historical'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'mid-Holocene' 'midHolocene'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'last glacial maximum' 'lgm'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'last millennium' 'past1000'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'RCP4.5' 'rcp45'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'RCP8.5' 'rcp85'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'RCP2.6' 'rcp26'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'RCP6' 'rcp60'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM pre-industrial control' 'esmControl'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM historical' 'esmHistorical'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM RCP8.5' 'esmrcp85'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM fixed climate 1' 'esmFixClim1'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM fixed climate 2' 'esmFixClim2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM feedback 1' 'esmFdbk1'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ESM feedback 2' 'esmFdbk2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'1 percent per year CO2' '1pctCO2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'abrupt 4XCO2' 'abrupt4xCO2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'natural-only' 'historicalNat'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'GHG-only' 'historicalGHG'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'anthropogenic-only' 'historicalAnt'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'anthropogenic sulfate aerosol direct effect only' 'historicalSD'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'anthropogenic sulfate aerosol only' 'historicalSA'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'tropospheric ozone only' 'historicalTO'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'stratospheric ozone' 'historicalSO'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'ozone only' 'historicalOz'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'land-use change only' 'historicalLU'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'solar irradiance only' 'historicalSl'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'volcanic aerosol only' 'historicalVl'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'sea salt only' 'historicalSS'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'dust' 'historicalDs'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'black carbon only' 'historicalBC'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'mineral dust only' 'historicalMD'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'organic carbon only' 'historicalOC'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'anthropogenic aerosols only' 'historicalAA'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'AMIP' 'amip'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'2030 time-slice' 'sst2030'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'control SST climatology' 'sstClim'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'CO2 forcing' 'sstClim4xCO2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'all aerosol forcing' 'sstClimAerosol'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'sulfate aerosol forcing' 'sstClimSulfate'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'4xCO2 AMIP' 'amip4xCO2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'AMIP plus patterned anomaly' 'amipFuture'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'aqua planet control' 'aquaControl'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'4xCO2 aqua planet' 'aqua4xCO2'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'aqua planet plus 4K anomaly' 'aqua4K'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>expt_id_ok:
+'AMIP plus 4K anomaly' 'amip4K'<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>approx_interval:<span
+style="mso-spacerun: yes">  </span>30.000000<span style="mso-spacerun:
+yes">     </span>! approximate spacing between successive
+time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>samples (in units
+of the output time <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun:
+yes">                         
+</span>!<span style="mso-spacerun: yes">   </span>coordinate.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+longitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>longitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>degrees_east<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:
+<span style="mso-spacerun:
+yes">            </span>X<span
+style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>longitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lon<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>0<span style="mso-spacerun:
+yes">         </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">   </span><span style="mso-spacerun:
+yes">     </span>360 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>degrees_north<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Y<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lat<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>-90<span style="mso-spacerun:
+yes">         </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>90 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+plevs<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>air_pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>Pa<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>down<span style="mso-spacerun:
+yes">         </span>! up or down
+(default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>plev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+decreasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>tolerance:<span
+style="mso-spacerun: yes">       
+</span>0.001<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>requested:<span
+style="mso-spacerun: yes">   </span><span style="mso-spacerun:
+yes">     </span>100000. 92500. 85000. 70000. 60000.
+50000. 40000. 30000. 25000. 20000. 15000. 10000. 7000. 5000. 3000. 2000.
+1000.<span style="mso-spacerun: yes">       
+</span>! space-separated list of requested coordinates <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+no<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+alevbnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>atmospheric model half-level<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+no<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>index_only:<span
+style="mso-spacerun: yes">       </span>ok<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>days since ?<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>T<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">     </span><span
+style="mso-spacerun: yes">   </span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+time2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>days since ?<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>T<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>climatology:<span
+style="mso-spacerun: yes">      </span>yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+height2m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>up<span style="mso-spacerun:
+yes">         </span>! up or down
+(default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">      </span><span
+style="mso-spacerun: yes">  </span>1<span style="mso-spacerun:
+yes">         </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>10 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>value:<span
+style="mso-spacerun:
+yes">           
+</span>2.<span style="mso-spacerun:
+yes">           
+</span>! of scalar (singleton) dimension <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+no<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+height10m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<span style="mso-spacerun:
+yes">            
+</span>! X, Y, Z, T (default: undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>up<span style="mso-spacerun:
+yes">         </span>! up or down (default:
+undeclared)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>1<span style="mso-spacerun:
+yes">         </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>30 <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">            
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>value:<span
+style="mso-spacerun:
+yes">           
+</span>10.<span style="mso-spacerun:
+yes">           
+</span>! of scalar (singleton) dimension <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+no<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+smooth_level<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+This coordinate is a hybrid height coordinate with units of meters (m).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>It increases upward.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>The values of a(k)*ztop, which appear
+in the formula below, should be stored as smooth_level. <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>Note that in the netCDF file the
+variable will be named "lev", not smooth_level.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>atmosphere_sleve_coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style='mso-tab-count:1'>     </span><span
+style="mso-spacerun: yes">      </span>up<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>atmosphere smooth level vertical (SLEVE) coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">       
+</span>-200.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">       
+</span>800000.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>formula:<span
+style="mso-spacerun:
+yes">          </span>z(n,k,j,i) =
+a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_factors:<span
+style="mso-spacerun: yes">        </span>a:
+a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_bounds_factors:
+a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+natural_log_pressure<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!This
+coordinate is dimensionless and varies from near 0 at the surface and increases
+upward.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>The values of lev(k), which appears in
+the formula below, should be stored as natural_log_pressure.<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>Note that in the netCDF file the
+variable will be named "lev", not natural_log_pressure.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">   
+</span>atmosphere_ln_pressure_coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>atmosphere natural log pressure coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style='mso-tab-count:1'>     </span><span
+style="mso-spacerun: yes">      </span>down<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+decreasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>-1.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>20.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>formula:<span
+style="mso-spacerun:
+yes">          </span>p(k) = p0 *
+exp(-lev(k))<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_factors:<span
+style="mso-spacerun: yes">        </span>p0:
+p0 lev: lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_bounds_factors:
+p0: p0 lev: lev_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:
+standard_sigma<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+This coordinate is dimensionless and varies from 0 at the model top to 1.0 at
+the surface.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>The values of sigma(k), which appears
+in the formula below, should be stored as standard_sigma.<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>Note that in the netCDF file the
+variable will be named "lev", not standard_sigma.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    </span>atmosphere_sigma_coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>down<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>sigma coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+decreasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>1.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>formula:<span
+style="mso-spacerun:
+yes">          </span>p(n,k,j,i) =
+ptop + sigma(k)*(ps(n,j,i) - ptop)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_factors:<span
+style="mso-spacerun: yes">       
+</span>ptop: ptop sigma: lev ps: ps<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_bounds_factors:
+ptop: ptop sigma: lev_bnds ps: ps<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:<span
+style="mso-spacerun: yes">  </span>standard_hybrid_sigma<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+This coordinate is dimensionless and varies from a small value at the model top
+to 1.0 at the surface.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>The values of a(k)+ b(k), which appear
+in the formula below, should be stored as standard_hybrid_sigma.<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>Note that in the netCDF file the
+variable will be named "lev", not standard_hybrid_sigma.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!---------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">   
+</span>atmosphere_hybrid_sigma_pressure_coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>down<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>hybrid sigma pressure coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+decreasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>1.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>formula:<span
+style="mso-spacerun:
+yes">          </span>p(n,k,j,i) =
+a(k)*p0 + b(k)*ps(n,j,i)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_factors:<span
+style="mso-spacerun: yes">        </span>p0:
+p0 a: a b: b ps: ps<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_bounds_factors:
+p0: p0 a: a_bnds b: b_bnds ps: ps<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:2'>        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:<span
+style="mso-spacerun: yes">  </span>alternate_hybrid_sigma<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+This coordinate is dimensionless and varies from a small value at the model top
+to 1.0 at the surface.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>The values of ap(k)/p0 + b(k), which
+appear in the formula below, should be stored as alternate_hybrid_sigma.<span
+style="mso-spacerun: yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>Note that in the netCDF file the
+variable will be named "lev", not alternate_hybrid_sigma.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">   
+</span>atmosphere_hybrid_sigma_pressure_coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>down<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>hybrid sigma pressure coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+decreasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        </span>1.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>formula:<span
+style="mso-spacerun:
+yes">          </span>p(n,k,j,i) =
+ap(k) + b(k)*ps(n,j,i)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_factors:<span
+style="mso-spacerun: yes">        </span>p0:
+p0 ap: ap b: b ps: ps<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_bounds_factors:
+p0 ap: ap_bnds b: b_bnds ps: ps<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:2'>        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis_entry:<span
+style="mso-spacerun: yes">  </span>hybrid_height<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+This coordinate has dimension of meters (m) and increases upward.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>The values of a(k) which appear in the
+formula below, should be stored as hybrid_height.<span style="mso-spacerun:
+yes">  </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<span
+style="mso-spacerun: yes">  </span>Note that in the netCDF file the
+variable will be named "lev", not hybrid_height.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Axis attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">   
+</span>atmosphere_hybrid_height_coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>axis:<span
+style="mso-spacerun:
+yes">            
+</span>Z <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun: yes">        
+</span>up<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       
+</span>hybrid height coordinate<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional axis information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun: yes">        
+</span>lev<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>must_have_bounds:
+yes<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>stored_direction:
+increasing<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        </span>0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>formula:<span
+style="mso-spacerun:
+yes">          </span>z(k,j,i) =
+a(k) + b(k)*orog(j,i)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_factors:<span
+style="mso-spacerun: yes">        </span>a:
+lev b: b orog: orog<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>z_bounds_factors:
+a: lev_bnds b: b_bnds orog: orog<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:2'>        </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+***************************************************************<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Vertical coordinate formula terms:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+***************************************************************<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>orog<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">     </span>surface_altitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Surface Altitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>height
+above the geoid; as defined here, ""the geoid"" is a
+surface of constant geopotential that, if the ocean were at rest, would coincide
+with mean sea level. Under this definition, the geoid changes as the mean
+volume of the ocean changes (e.g., due to glacial melt, or global warming of
+the ocean).<span style="mso-spacerun: yes">  </span>Report here the height
+above the present-day geoid.<span style="mso-spacerun: yes">  </span>Over
+ocean, report as 0.0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>orog<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_min:<span
+style="mso-spacerun: yes">        
+</span>-700<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>valid_max:<span
+style="mso-spacerun: yes">        
+</span>1.00E+04<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+p0<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       </span>vertical
+coordinate formula term: reference pressure <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           </span>Pa<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+ptop<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       </span>pressure
+at top of model <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           </span>Pa<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+a<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">   </span>vertical coordinate formula term:
+a(k)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>alevel<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">              
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+b<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">   </span>vertical coordinate formula term:
+b(k)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>alevel<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">              
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+a_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">   </span>vertical coordinate formula term:
+a(k+1/2)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>alevel<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">              
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+b_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">   </span>vertical coordinate formula term:
+b(k+1/2)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>alevel<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">              
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+ap<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">   </span>vertical coordinate formula term:
+ap(k)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           </span>Pa<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>alevel<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">              
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+ap_bnds<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">   </span>vertical coordinate formula term:
+ap(k+1/2)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           </span>Pa<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">        
+</span>alevel<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">              
+</span>double<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:
+ztop<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">       </span>height of
+top of model <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">           </span>m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<span
+style='mso-tab-count:1'> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>tas<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">     </span>air_temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>K<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Near-Surface Air Temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">          
+</span>near-surface (usually, 2 meter) air temperature.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude time height2m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>tas<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>tasmin<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">     </span>air_temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>K<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: minimum
+within days time: mean over time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Daily Minimum Near-Surface Air Temperature<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">          
+</span>monthly mean of the daily-minimum near-surface (usually, 2 meter) air
+temperature.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude time height2m<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>tasmin<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>pr<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:
+<span style="mso-spacerun: yes">   </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">     </span>precipitation_flux<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>kg m-2 s-1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Precipitation<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>at
+surface; includes both liquid and solid phases from all types of clouds (both
+large-scale and convective)<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>pr<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>hfls<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    
+</span>surface_upward_latent_heat_flux<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>W m-2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Surface Upward Latent Heat Flux<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">          
+</span>includes both evaporation and sublimation<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>hfls<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>positive:<span
+style="mso-spacerun:
+yes">          </span>up<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>cl<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    
+</span>cloud_area_fraction_in_atmosphere_layer<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>%<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Cloud Area Fraction<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>Report
+on model layers (not standard pressures).<span style="mso-spacerun: yes"> 
+</span>Include both large-scale and convective cloud.<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude alevel time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>cl<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><span
+style="mso-spacerun: yes"> </span><o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>ua<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">     </span>eastward_wind<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>m s-1<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Eastward Wind<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude plevs time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>ua<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>co2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    
+</span>mole_fraction_of_carbon_dioxide_in_air<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>1e-6<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Mole Fraction of CO2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>For
+some simulations (e.g., prescribed concentration pi-control run), this will not
+vary from one year to the next, and so report instead the variable described in
+the next table entry.<span style="mso-spacerun: yes">  </span>If spatially
+uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the
+table entry after the next one). <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude plevs time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>co2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>co2Clim<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>standard_name:<span
+style="mso-spacerun: yes">    
+</span>mole_fraction_of_carbon_dioxide_in_air<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>1e-6<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean
+within years time: mean over years<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Mole Fraction of CO2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>Report
+only for simulations (e.g., prescribed concentration pi-control run), in which
+the CO2 does not vary from one year to the next. Report 12 monthly values,
+starting with January, even if the values don't vary seasonally.<span
+style="mso-spacerun: yes">  </span>When calling CMOR, identify this
+variable as co2Clim, not co2.<span style="mso-spacerun: yes">  
+</span>If<span style="mso-spacerun: yes">  </span>CO2 is spatially
+uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the
+table entry after the next).<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>longitude latitude plevs time2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>co2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">           </span><span
+style="mso-spacerun: yes">   </span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>co2mass<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>kg<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Total Atmospheric Mass of CO2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>For
+some simulations (e.g., prescribed concentration pi-control run), this will not
+vary from one year to the next, and so report instead the variable described in
+the next table entry.<span style="mso-spacerun: yes">  </span>If CO2 is
+spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the
+table entry before the previous one). <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>time<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>co2mass<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>variable_entry:<span
+style="mso-spacerun: yes">    </span>co2massClim<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!============<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>modeling_realm:<span
+style="mso-spacerun: yes">    </span>atmos<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Variable attributes:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>units:<span
+style="mso-spacerun:
+yes">            
+</span>kg<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>cell_methods:<span
+style="mso-spacerun: yes">      </span>time: mean
+within years time: mean over years<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>long_name:<span
+style="mso-spacerun: yes">        
+</span>Total Atmospheric Mass of CO2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>comment:<span
+style="mso-spacerun:
+yes">           </span>Report
+only for simulations (e.g., prescribed concentration pi-control run), in which
+the CO2 does not vary from one year to the next. Report 12 monthly values,
+starting with January, even if the values don't vary seasonally.<span
+style="mso-spacerun: yes">  </span>When calling CMOR, identify this
+variable as co2massClim, not co2mass.<span style="mso-spacerun: yes"> 
+</span>If CO2 is spatially nonuniform, omit this field, but report Mole
+Fraction of CO2 (see the table entry before the previous one). <o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!
+Additional variable information:<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>dimensions:<span
+style="mso-spacerun: yes">       
+</span>time2<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>out_name:<span
+style="mso-spacerun:
+yes">          </span>co2mass<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>type:<span
+style="mso-spacerun:
+yes">             
+</span>real<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!----------------------------------<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'>!<o:p></o:p></span></p>
+
+<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span
+style='font-size:9.0pt;font-family:"Courier New";mso-bidi-font-family:"Courier New"'><o:p> </o:p></span></p>
+
+</div>
+
+<div style='mso-element:footnote-list'><![if !supportFootnotes]><br clear=all>
+
+<hr align=left size=1 width="33%">
+
+<![endif]>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText style='text-align:justify'><a style='mso-footnote-id:
+ftn' href="#_ftnref" name="_ftn1" title=""><span class=MsoFootnoteReference><span
+style='mso-special-character:footnote'><![if !supportFootnotes]>[1]<![endif]></span></span></a>
+CMOR is pronounced "C-more", which suggests that CMOR should enable a
+wide community of scientists to "see more" climate data produced by
+modeling centers around the world.<span style="mso-spacerun: yes"> 
+</span>CMOR also reminds us of Ecinae Corianus, the revered ancient Greek
+scholar, known to his friends as "Seymour".<span style="mso-spacerun:
+yes">  </span>Seymour spent much of his life translating into Greek nearly
+all the existing climate data, which had originally been recorded on largely
+inscrutable hieroglyphic and cuneiform tablets.<span style="mso-spacerun:
+yes">  </span>His resulting volumes, organized in a uniform fashion and in
+a language readable by the common scientists of the day, provided the basis for
+much subsequent scholarly research.<span style="mso-spacerun: yes"> 
+</span>Ecinae Corianus was later indirectly honored by early inhabitants of the
+British Isles who reversed the spelling of his name and used the resulting
+string of letters, grouped differently, to form new words referring to the
+major elements of climate.</p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn2" title=""><span class=MsoFootnoteReference><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[2]<![endif]></span></span></a> CMOR1 was
+written in Fortran 90 with access also provided through Python.</p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn3" title=""><span class=MsoFootnoteReference><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[3]<![endif]></span></span></a> See <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">http://www.cgd.ucar.edu/cms/eaton/cf-metadata</a>
+</p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn4" title=""><span class=MsoFootnoteReference><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[4]<![endif]></span></span></a> See <a
+href="http://my.unidata.ucar.edu/content/software/netcdf/">http://my.unidata.ucar.edu/content/software/netcdf/</a></p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn5" title=""><span class=MsoFootnoteReference><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[5]<![endif]></span></span></a>
+"MIP" is an acronym for "model intercomparison project".</p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn6" title=""><span class=MsoFootnoteReference><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[6]<![endif]></span></span></a> CMOR1 was
+linked to an earlier version of the netCDF library and udunits was optional.</p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn7" title=""><span class=MsoFootnoteReference><span style='mso-special-character:
+footnote'><![if !supportFootnotes]>[7]<![endif]></span></span></a> Cdtime is
+now built into CMOR. Therefore linking against cdms is no longer necessary.</p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoFootnoteText><a style='mso-footnote-id:ftn' href="#_ftnref"
+name="_ftn8" title=""><span class=MsoFootnoteReference><span style='color:#00B050'><span
+style='mso-special-character:footnote'><![if !supportFootnotes]>[8]<![endif]></span></span></span></a><span
+style='color:#00B050'> In the Fortran version only, to preserve compatibility
+with CMOR1, the character strings “replace”, “append”, and “preserve” may be
+passed instead of the integers CMOR_REPLACE, CMOR_APPEND, and CMOR_PRESERVE,
+respectively, but this option is deprecated.<o:p></o:p></span></p>
+
+</div>
+
+<div style='mso-element:footnote' id=ftn>
+
+<p class=MsoNormal style='text-align:justify;tab-stops:273.75pt'><a
+style='mso-footnote-id:ftn' href="#_ftnref" name="_ftn9" title=""><span
+class=MsoFootnoteReference><span style='font-size:10.0pt'><span
+style='mso-special-character:footnote'><![if !supportFootnotes]>[9]<![endif]></span></span></span></a><span
+style='font-size:10.0pt'> <span style='background:silver;mso-highlight:silver'>Note:
+For CMIP5 model_id and forcing are required. For backward compatibility with
+the original CMOR code, the model_id and forcing are “optionally” required by
+CMOR2, meaning they become mandatory only if they appear as
+“required_global_attributes” in the CMOR table. For this reason, a call to
+cmor_dataset without these would not return an error until a call is made to
+cmor_write, since it is table-dependent. <o:p></o:p></span></span></p>
+
+<p class=MsoFootnoteText><o:p> </o:p></p>
+
+</div>
+
+</div>
+
+</body>
+
+</html>
diff --git a/Doc/cmor_users_guide.pdf b/Doc/cmor_users_guide.pdf
new file mode 100644
index 0000000..fb82dd1
Binary files /dev/null and b/Doc/cmor_users_guide.pdf differ
diff --git a/Doc/cmor_users_guide_files/filelist.xml b/Doc/cmor_users_guide_files/filelist.xml
new file mode 100644
index 0000000..d375492
--- /dev/null
+++ b/Doc/cmor_users_guide_files/filelist.xml
@@ -0,0 +1,5 @@
+<xml xmlns:o="urn:schemas-microsoft-com:office:office">
+ <o:MainFile HRef="::cmor_users_guide.htm"/>
+ <o:File HRef="header.htm"/>
+ <o:File HRef="filelist.xml"/>
+</xml>
\ No newline at end of file
diff --git a/Doc/cmor_users_guide_files/header.htm b/Doc/cmor_users_guide_files/header.htm
new file mode 100644
index 0000000..10d7985
--- /dev/null
+++ b/Doc/cmor_users_guide_files/header.htm
@@ -0,0 +1,122 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns:css="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta name=Title content="Climate Model Output Rewriter (CMOR)">
+<meta name=Keywords content="">
+<meta http-equiv=Content-Type content="text/html; charset=utf-8">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 2008">
+<meta name=Originator content="Microsoft Word 2008">
+<link id=Main-File rel=Main-File href="cmor_users_guide.htm">
+</head>
+
+<body lang=EN-US link=blue vlink=purple>
+
+<div style='mso-element:footnote-separator' id=fs>
+
+<p class=MsoNormal><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
+
+<hr align=left size=1 width="33%">
+
+<![endif]></span></p>
+
+</div>
+
+<div style='mso-element:footnote-continuation-separator' id=fcs>
+
+<p class=MsoNormal><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
+
+<hr align=left size=1>
+
+<![endif]></span></p>
+
+</div>
+
+<div style='mso-element:endnote-separator' id=es>
+
+<p class=MsoNormal><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
+
+<hr align=left size=1 width="33%">
+
+<![endif]></span></p>
+
+</div>
+
+<div style='mso-element:endnote-continuation-separator' id=ecs>
+
+<p class=MsoNormal><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
+
+<hr align=left size=1>
+
+<![endif]></span></p>
+
+</div>
+
+<div style='mso-element:header' id=h1>
+
+<p class=MsoHeader><o:p> </o:p></p>
+
+</div>
+
+<div style='mso-element:footer' id=ef1>
+
+<div style='mso-element:frame;mso-element-wrap:around;mso-element-anchor-vertical:
+paragraph;mso-element-anchor-horizontal:margin;mso-element-left:center;
+mso-element-top:.05pt;mso-height-rule:exactly'>
+
+<table cellspacing=0 cellpadding=0 hspace=0 vspace=0 align=center>
+ <tr>
+  <td valign=top style='padding-top:0in;padding-right:0in;padding-bottom:0in;
+  padding-left:0in'>
+  <p class=MsoFooter style='mso-element:frame;mso-element-wrap:around;
+  mso-element-anchor-vertical:paragraph;mso-element-anchor-horizontal:margin;
+  mso-element-left:center;mso-element-top:.05pt;mso-height-rule:exactly'><!--[if supportFields]><span
+  class=MsoPageNumber><span style='mso-element:field-begin'></span>PAGE<span
+  style="mso-spacerun: yes">  </span></span><![endif]--><!--[if supportFields]><span
+  class=MsoPageNumber><span style='mso-element:field-end'></span></span><![endif]--><span
+  class=MsoPageNumber><o:p></o:p></span></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoFooter><o:p> </o:p></p>
+
+</div>
+
+<div style='mso-element:footer' id=f1>
+
+<div style='mso-element:frame;mso-element-wrap:around;mso-element-anchor-vertical:
+paragraph;mso-element-anchor-horizontal:margin;mso-element-left:center;
+mso-element-top:.05pt;mso-height-rule:exactly'>
+
+<table cellspacing=0 cellpadding=0 hspace=0 vspace=0 align=center>
+ <tr>
+  <td valign=top style='padding-top:0in;padding-right:0in;padding-bottom:0in;
+  padding-left:0in'>
+  <p class=MsoFooter style='mso-element:frame;mso-element-wrap:around;
+  mso-element-anchor-vertical:paragraph;mso-element-anchor-horizontal:margin;
+  mso-element-left:center;mso-element-top:.05pt;mso-height-rule:exactly'><!--[if supportFields]><span
+  class=MsoPageNumber><span style='mso-element:field-begin'></span>PAGE<span
+  style="mso-spacerun: yes">  </span><span style='mso-element:field-separator'></span></span><![endif]--><span
+  class=MsoPageNumber><span style='mso-no-proof:yes'>3</span></span><!--[if supportFields]><span
+  class=MsoPageNumber><span style='mso-element:field-end'></span></span><![endif]--><span
+  class=MsoPageNumber><o:p></o:p></span></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoFooter><o:p> </o:p></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/Doc/standard_output.html b/Doc/standard_output.html
new file mode 100644
index 0000000..d3c4c75
--- /dev/null
+++ b/Doc/standard_output.html
@@ -0,0 +1,5561 @@
+<html>
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=Generator content="Microsoft Word 11 (filtered)">
+<title>IPCC Standard Output from Coupled Ocean-Atmosphere GCMs</title>
+
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin:0in;
+	margin-bottom:.0001pt;
+	font-size:12.0pt;
+	font-family:"Times New Roman";}
+h1
+	{margin-right:0in;
+	margin-left:0in;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{margin-right:0in;
+	margin-left:0in;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h3
+	{margin-right:0in;
+	margin-left:0in;
+	font-size:13.5pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:blue;
+	text-decoration:underline;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:blue;
+	text-decoration:underline;}
+p
+	{margin-right:0in;
+	margin-left:0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";}
+p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
+	{margin:0in;
+	margin-bottom:.0001pt;
+	font-size:8.0pt;
+	font-family:Tahoma;}
+ins
+	{text-decoration:none;}
+span.msoIns
+	{text-decoration:underline;}
+span.msoDel
+	{text-decoration:line-through;
+	color:red;}
+ /* Page Definitions */
+ @page Section1
+	{size:11.0in 8.5in;
+	margin:1.0in .8in 1.0in .8in;}
+div.Section1
+	{page:Section1;}
+ /* List Definitions */
+ ol
+	{margin-bottom:0in;}
+ul
+	{margin-bottom:0in;}
+-->
+</style>
+
+</head>
+
+<body lang=EN-US link=blue vlink=blue>
+
+<div class=Section1>
+
+<h1 align=center style='text-align:center'>IPCC Standard Output from Coupled
+Ocean-Atmosphere GCMs</h1>
+
+<p class=MsoNormal align=center style='text-align:center'><b><span
+style='font-size:13.5pt'>WGCM Climate Simulation Panel<sup>1</sup> with the
+assistance of PCMDI<sup>2</sup></span></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b>For further
+information contact: <a href="mailto:taylor13 at llnl.gov">taylor13 at llnl.gov</a></b></p>
+
+<p class=MsoNormal><sup>1</sup> Panel members include: Gerald Meehl (chair), Curt
+Covey, Mojib Latif, Bryant McAvaney, John Mitchell, and Ron Stouffer.</p>
+
+<p class=MsoNormal><sup>2</sup> Contributing PCMDI members include: Karl E.
+Taylor, Curt Covey, Krishna AchutaRao, Michael Fiorino, Peter J. Gleckler,
+Thomas J. Phillips, <span class=grame>and Kenneth</span> R. Sperber.</p>
+
+<p align=center style='text-align:center'><span style='font-size:13.5pt'>Click <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output_updates.htm">here</a> for
+a summary of recent changes to this document.</span></p>
+
+<p align=center style='text-align:center'><span style='font-size:13.5pt'>Click <a
+href="http://www-pcmdi.llnl.gov/ipcc/standard_output.pdf">here</a> to obtain a
+pdf version of this document. </span></p>
+
+<p align=center style='text-align:center'><span style='font-size:13.5pt'> </span></p>
+
+<p align=center style='text-align:center'><span style='font-size:13.5pt'>16 August
+2007</span></p>
+
+<div class=MsoNormal align=center style='text-align:center'>
+
+<hr size=2 width="100%" align=center>
+
+</div>
+
+<h2><span style='font-size:14.0pt'>Contents:</span></h2>
+
+<h2 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in;line-height:150%'><span
+style='font-size:12.0pt;line-height:150%;font-family:Symbol;font-weight:normal'>�</span><span
+style='font-size:7.0pt;line-height:150%;font-weight:normal'>       
+</span><span style='font-size:12.0pt;line-height:150%'><a
+href="#Introduction">Introduction and format
+requirements</a></span></h2>
+
+<h2 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in;line-height:150%'><span
+style='font-size:12.0pt;line-height:150%;font-family:Symbol;font-weight:normal'>�</span><span
+style='font-size:7.0pt;line-height:150%;font-weight:normal'>       
+</span><span style='font-size:12.0pt;line-height:150%'><a
+href="#overview">Model output overview</a></span></h2>
+
+<h2 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in;line-height:150%'><span
+style='font-size:12.0pt;line-height:150%;font-family:Symbol;font-weight:normal'>�</span><span
+style='font-size:7.0pt;line-height:150%;font-weight:normal'>       
+</span><span style='font-size:12.0pt;line-height:150%'><a
+href="#Highest_priority_output">Highest
+priority output fields</a></span></h2>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A1a">Table A1a</a>: Monthly-mean
+2-d atmosphere or land surface data (longitude, latitude, time:month)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A1b">Table A1b</a>:
+Time-independent 2-d land surface data (longitude, latitude)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A1c">Table A1c</a>: Monthly-mean
+3-d atmosphere data (longitude, latitude, pressure, time:month)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1a">Table O1a</a>: Monthly-mean
+1-d ocean data (latitude, region, time:month</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1b">Table O1b</a>: Monthly-mean
+2-d ocean data (latitude, depth, region, time:month)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1c">Table O1c</a>: Monthly-mean
+0-d or 2-d ocean or sea ice data (longitude, latitude, time:month)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1d">Table O1d</a>:
+Time-independent 2-d ocean data (longitude, latitude)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1e">Table O1e</a>: Monthly-mean
+3-d ocean data (longitude, latitude, depth, time:month)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A2a">Table A2a</a>: Daily-mean 2-d
+atmosphere data (longitude, latitude, time:day)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A2b">Table A2b</a>: Daily-mean 3-d
+atmosphere data (longitude, latitude, pressure, time:day)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A3">Table A3</a>: 3-bourly 2-d
+atmosphere data (longitude, latitude, time:3hour at 0, 3, 6, 9, 12, 15, 18, 21
+Z)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A4">Table A4</a>: Extremes indices
+(longitude, latitude, time:year) from Frich et al. (their Table 1)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'> </p>
+
+<h2 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in;line-height:150%'><span
+style='font-size:12.0pt;line-height:150%;font-family:Symbol;font-weight:normal'>�</span><span
+style='font-size:7.0pt;line-height:150%;font-weight:normal'>       
+</span><span style='font-size:12.0pt;line-height:150%'><a
+href="#Lower_priority_output">Lower
+priority output fields</a></span></h2>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A1d">Table A1d</a>: Monthly-mean
+ISCCP simulator data (longitude, latitude, pressure2, tau, time)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A5">Table A5</a>: Monthly-mean 2-d
+radiative forcing data (longitude, latitude, time)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A1e">Table A1e</a>: Monthly-mean
+2-d and 3-d sulfate aerosol fields</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1f">Table O1f</a>: Monthly-mean
+1-d and 2-d ocean fields</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_O1g">Table O1g</a>: Monthly-mean
+2-d sea ice fields (longitude, latitude, time:month)</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'><a
+href="#Table_A1f">Table A1f</a>: Monthly-mean
+surface fields and prescribed land surface characteristics</p>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;
+margin-bottom:.0001pt;text-indent:-.25in'> </p>
+
+<h2 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in;line-height:150%'><span
+style='font-size:12.0pt;line-height:150%;font-family:Symbol;font-weight:normal'>�</span><span
+style='font-size:7.0pt;line-height:150%;font-weight:normal'>       
+</span><span style='font-size:12.0pt;line-height:150%'><a
+href="#Coordinate_dimensions.">Coordinate
+dimensions</a></span></h2>
+
+<h2 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in;line-height:150%'><span
+style='font-size:12.0pt;line-height:150%;font-family:Symbol;font-weight:normal'>�</span><span
+style='font-size:7.0pt;line-height:150%;font-weight:normal'>       
+</span><span style='font-size:12.0pt;line-height:150%'><a
+href="#Experiments">Experiments and time
+periods for which data should be submitted</a></span></h2>
+
+<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.5in;
+margin-bottom:.0001pt;text-indent:-.25in'> </p>
+
+<h2><a name=Introduction>Introduction and format requirements</a></h2>
+
+<p>The following list of standard output for coupled GCMs is intended both to
+serve the immediate needs of the IPCC and to become a recommended "core
+set" of variables for CMIP. </p>
+
+<p>Modeling groups contributing output to the IPCC and CMIP database must
+ensure that it meets rather strict format and metadata requirements. 
+These requirements yield files produced in network Common Data Form (netCDF;
+see <a href="http://www.unidata.ucar.edu/packages/netcdf">http://www.unidata.ucar.edu/packages/netcdf)</a>,
+which has become the most popular form for exchanging ocean-atmosphere model
+output.  The files will be "self-describing" and the metadata
+contained in the files will conform with the NetCDF Climate and Forecast (CF)
+Metadata Conventions (see <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata">http://www.cgd.ucar.edu/cms/eaton/cf-metadata)</a>. 
+The new CF conventions for netCDF data generalize and extend the Cooperative   Ocean / Atmosphere Research Data Service (COARDS) conventions developed in
+the 1990s. Note that the CF convention establishes standard names for climate
+and weather variables, which identify the physical quantity. These standard
+names are given in the tables below. Note that more than one field can be
+associated with the same standard name because different fields sampled in
+different ways (e.g., surface air temperature vs. upper air temperature) refer
+to the same physical quantity.  Nevertheless, one can uniquely identify
+each stored field by considering additional metadata stored in the file (e.g.,
+dimension information). Extended definitions of CF standard names, which
+basically answer the question "What do you mean precisely by this
+quantity?", may be found on the Web at <a
+href="http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html">http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html.</a></p>
+
+<p><b><i>The detailed requirements</i></b> for CMIP / IPCC contributions are
+contained in the document <a
+href="http://www-pcmdi.llnl.gov/ipcc/IPCC_output_requirements.htm">http://www-pcmdi.llnl.gov/ipcc/IPCC_output_requirements.htm.</a>
+This document should be read carefully before preparing contributions. Perhaps
+the easiest way to meet these requirements is to rewrite your model output
+through CMOR, a software library available from PCMDI and further described in
+the next paragraph. Put briefly, the requirements involve metadata, coordinate
+systems, and file organization. Units and sign conventions of the data must
+conform to the tables below. Latitude-longitude grids must be rectilinear,
+i.e., have a unique set of longitudes that applies to all latitudes. Data on
+non-rectilinear grids (typically occurring for ocean output) must be
+interpolated to rectilinear grids before transmission to the PCMDI. (In this
+case, the original "native grid" data, if deemed of sufficient value,
+may also be provided to the PCMDI.) Vertical coordinates must be depth for
+ocean variables and pressure for atmosphere variables (with the exception of
+cloudiness, which as noted below should be provided on model levels).
+Three-dimensional atmosphere variables must be interpolated to standard
+pressure levels given below. We also recommend -- but do not require -- that
+the ocean depth  levels match Levitus observations. Finally, we require
+that submitted files contain only one output variable per file, though they may
+have many time points per file. This file organization contrasts with the
+typical model output history files, which contain all variables for a single
+time step. </p>
+
+<p>To facilitate adherence to these standards, the PCMDI has written (in FORTRAN
+90) a standard output code called CMOR (pronounced "see more"; see <a
+href="http://www-pcmdi.llnl.gov/software-portal/cmor">http://www-pcmdi.llnl.gov/software-portal/cmor</a>).
+This code structures the data uniformly and writes netCDF files in full compliance
+with IPCC requirements. Use of CMOR is being encouraged (and in some cases
+required) by various ongoing model intercomparison projects.� The CMOR
+documentation in pdf format is available at <a
+href="http://www-pcmdi.llnl.gov/software/cmor/cmor_users_guide.pdf">http://www-pcmdi.llnl.gov/software/cmor/cmor_users_guide.pdf</a>,
+and the source code is available at� <a
+href="http://www-pcmdi.llnl.gov/software-portal/cmor/download">http://www-pcmdi.llnl.gov/software-portal/cmor/download</a>.
+For further information, contact <a href="mailto:taylor13 at llnl.gov">taylor13 at llnl.gov.</a></p>
+
+<p>The notes that appear in the following tables are meant to provide precise
+definitions of the requested fields.  Sometimes it may be impossible to
+satisfy the requests; in these cases, any deviations from the specifications
+below should be described in the "history" and/or "comment"
+attributes associated with the variable</p>
+
+<h2><a name=overview>Model output overview</a></h2>
+
+<p>The model output fields listed below are identified as either being
+"highest priority" (tables A1a-A1c, A2-A4, and O1a-O1e) or
+"lower priority" (tables A1d-A1f, A5, and O1f-O1g).  The fields
+appearing in the "lower priority" tables will in some cases be
+essential for carrying out analyses of high interest (e.g., the radiative
+forcing fields are needed to help determine why models have different responses
+to anthropogenic influences); placement in the "lower priority" table
+may reflect one or more of the following factors: 1) perceived to be difficult
+to calculate (or lack of agreement as to calculation method), 2) nominated
+late, after the "highest priority" tables had been officially
+released, or 3) generally perceived to be of somewhat less interest than other
+fields. </p>
+
+<p>Some of the variables in the tables below were required for the original
+1997 version of <a href="http://www-pcmdi.llnl.gov/projects/cmip/announ.php">CMIP2
+</a>or have been requested for contributions to the CMIP pilot project
+"20th Century Climate in Coupled Models" (<a
+href="http://www-pcmdi.llnl.gov/projects/cmip/ann_20c3m.php">20C3M</a>). Many
+of the additional fields were requested by AMIP, the atmosphere-only
+counterpart of CMIP in which ocean surface and sea ice boundary conditions are
+prescribed to match observations over the late 20th century (see <a
+href="http://www-pcmdi.llnl.gov/projects/amip/OUTPUT/AMIP2/outlist.php">AMIP2
+standard output). </a> Suggestions for additions or changes to these
+tables are welcome and will be considered for future model intercomparison and
+IPCC exercises.</p>
+
+<p>In most cases, variables that appear in the same table will all be
+associated with a single climate component (i.e., atmosphere, ocean, land, or
+sea ice) and will all be a function of the same spatial dimensions.  Also
+the temporal sampling (3-hourly, daily, monthly, or time-independent) and any
+spatial or temporal averaging will in most cases be the same within each table.</p>
+
+<h2><a name="Highest_priority_output">Highest priority output fields</a></h2>
+
+<h3><span style='color:navy'>Monthly-mean and time-independent data</span></h3>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr style='page-break-inside:avoid;height:44.25pt'>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p><a name="Table_A1a"><b><i>Table A1a: </i>Monthly-mean 2-d atmosphere or
+  land surface data (longitude, latitude, time:month).</b></a></p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:15.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure_at_sea_level
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>psl </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>precipitation_flux </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pr </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal>includes both liquid and solid phases.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tas </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>near-surface (usually, 2 meter) air temperature; the CMOR
+  singleton dimension default value of 2 m can be overridden, if absolutely
+  necessary, by redefining axis "height1".</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:129.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:129.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:129.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>moisture_content_of_soil_layer</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:129.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mrsos </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:129.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:129.75pt'>
+  <p class=MsoNormal>water in all phases in the upper 0.1 meters of soil, and
+  averaged over the land portion of the grid cell (i.e., compute by dividing
+  the total mass of water contained in the soil layer of the grid cell by the
+  land area in the grid cell); report as "missing" or 0.0 where the
+  land fraction is 0;  the CMOR singleton dimension default value of 0.1 m
+  can be overridden, if absolutely necessary, by redefining axis
+  "depth1".</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:87.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>soil_moisture_content</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mrso </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal>water in all phases summed over all soil layers, and
+  averaged over the land portion of the grid cell (i.e., compute by dividing the
+  total mass of water contained in the soil layer of the grid cell by the land
+  area in the grid cell); report as "missing" or 0.0 where the land
+  fraction is 0.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:15.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>6 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downward_eastward_stress
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tauu </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:15.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>7 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downward_northward_stress
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tauv </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:115.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:115.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>8 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:115.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_snow_thickness
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:115.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>snd </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:115.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:115.5pt'>
+  <p class=MsoNormal>this thickness when multiplied by the average area of the
+  grid cell covered by snow yields the time-mean snow volume.  Thus, for
+  time means, compute as the weighted sum of thickness (averaged over the
+  snow-covered portion of the grid cell) divided by the sum of the weights,
+  with the weights equal to the area covered by snow.  report as 0.0 in
+  snow-free regions.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>9 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upward_latent_heat_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfls </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upward_sensible_heat_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfss </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>11 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_longwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlds </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>12 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_longwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlus </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>13 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_shortwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsds </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>14 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_shortwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsus </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:15.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>15 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_temperature
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ts </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal>"skin" temperature (i.e., SST for open ocean)</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:15.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>16 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_air_pressure
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ps </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:15.75pt'>
+  <p class=MsoNormal><i>not </i>mean sea-level pressure</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>17 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>snowfall_flux </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>prsn </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>18 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>convective_precipitation_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>prc </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>19 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_water_vapor_content
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>prw </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>vertically integrated through the atmospheric column</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:87.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>20 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>soil_frozen_water_content</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mrfso </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:87.0pt'>
+  <p class=MsoNormal>summed over all soil layers, and averaged over the land
+  portion of the grid cell (i.e., compute by dividing the total mass of frozen
+  water contained in the soil layer of the grid cell by the land area in the
+  grid cell); report as "missing" or 0.0 where the land fraction is
+  0.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>21 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_runoff_flux</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mrros </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>compute as the total surface runoff leaving the land
+  portion of the grid cell divided by the land area in the grid cell; report as
+  "missing" or 0.0 where the land fraction is 0.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>22 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>runoff_flux</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mrro </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>compute as the total runoff (including
+  "drainage" through the base of the soil model) leaving the land
+  portion of the grid cell divided by the land area in the grid cell; report as
+  "missing" or 0.0 where the land fraction is 0.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:72.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>23 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_snow_amount_where_land</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>snw </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal>compute as the mass of surface snow on the land portion of
+  the grid cell divided by the land area in the grid cell; report as
+  "missing" or 0.0 where the land fraction is 0; exclude snow on
+  vegetation canopy or on sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>24 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_snow_area_fraction_where_land</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>snc </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>fraction of grid cell covered by snow that lies on land;
+  exclude snow that lies on sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:72.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>25 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_snow_melt_flux_where_land</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>snm </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:72.75pt'>
+  <p class=MsoNormal>compute as the total surface melt water on the land
+  portion of the grid cell divided by the land area in the grid cell; report as
+  0.0 for snow-free land regions; report as 0.0 or "missing" where
+  the land fraction is 0.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>26 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_wind</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>uas </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>near-surface (usually, 10 meters) eastward component of
+  wind; the CMOR singleton dimension default value of 10 m can be overridden,
+  if absolutely necessary, by redefining axis "height2". </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>27 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_wind</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>vas </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>near-surface (usually, 10 meters) northward component of
+  wind; the CMOR singleton dimension default value of 10 m can be overridden,
+  if absolutely necessary, by redefining axis "height2". </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>28 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>specific_humidity</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>huss </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (i.e., dimensionless
+  fraction)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>near-surface (usually, 2meters) specific humidity; the
+  CMOR singleton dimension default value of 2 m can be overridden, if
+  absolutely necessary, by redefining axis "height1". </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>29 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>toa_incoming_shortwave_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsdt </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal>incident shortwave at the top of the atmosphere</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>30 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>toa_outgoing_shortwave_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsut </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p class=MsoNormal>at the top of the atmosphere</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>31 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>toa_outgoing_longwave_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlut </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>at the top of the atmosphere (to be compared with
+  satellite measurements)</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>32 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>net_downward_radiative_flux_at_top_of_
+  atmosphere_model </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rtmt </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>i.e., at the top of that portion of the atmosphere where
+  dynamics are explicitly treated by the model.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>33 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>net_downward_shortwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsntp </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>at 200 hPa only; the CMOR singleton dimension default
+  value of 200 hPa can be overridden, if absolutely necessary, by redefining
+  axis "pressure1".</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:12.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:12.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>34 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:12.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>net_upward_longwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:12.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlntp </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:12.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:12.0pt'>
+  <p class=MsoNormal>at 200 hPa only; the CMOR singleton dimension default
+  value of 200 hPa can be overridden, if absolutely necessary, by redefining
+  axis "pressure1".</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>35 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>net_downward_shortwave_flux_in_air_
+  assuming_clear_sky</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsntpcs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>at 200 hPa only; method "2" is recommended for
+  calculating clear-sky fluxes; the CMOR singleton dimension default value of
+  200 hPa can be overridden, if absolutely necessary, by redefining axis
+  "pressure1".</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>36 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>net_upward_longwave_flux_in_air_
+  assuming_clear_sky</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlntpcs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>at 200 hPa only; method "2" is recommended for
+  calculating clear-sky fluxes; the CMOR singleton dimension default value of
+  200 hPa can be overridden, if absolutely necessary, by redefining axis
+  "pressure1".</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>37 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_shortwave_flux_in_
+  air_assuming_clear_sky </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsdscs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>method "2" is recommended for calculating
+  clear-sky fluxes</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>38 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_shortwave_flux_in_
+  air_assuming_clear_sky </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsuscs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>method "2" is recommended for calculating
+  clear-sky fluxes</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>39 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_longwave_flux_in_
+  air_assuming_clear_sky </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rldscs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>method "2" is recommended for calculating
+  clear-sky fluxes</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>40 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>toa_outgoing_longwave_flux_assuming_
+  clear_sky </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlutcs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>method "2" is recommended for calculating
+  clear-sky fluxes</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>41 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>toa_outgoing_shortwave_flux_assuming_
+  clear_sky </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsutcs </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>method "2" is recommended for calculating
+  clear-sky fluxes</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>42 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>cloud_area_fraction
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>clt </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>for the whole atmospheric column, as seen from the surface
+  or the top of the atmosphere. Include both large-scale and convective cloud.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>43 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_cloud_condensed_water_content
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>clwvi </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>include both liquid and ice phases, consider all the mass
+  of condensed water in the column and divide by its area (in the
+  longitude-latitude plane) </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>44 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_cloud_ice_content
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>clivi </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>consider all the mass of ice-phase water in the column and
+  divide by its area (in the longitude-latitude plane)</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A1b"><b><i>Table A1b: </i>Time-independent 2-d land surface
+  data (longitude, latitude).</b></a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=50 style='width:37.5pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_altitude </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>orog </p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>height above the geoid; as defined here, "the
+  geoid" is a surface of constant geopotential that, if the ocean were at
+  rest, would coincide with mean sea level. Under this definition, the geoid
+  changes as the mean volume of the ocean changes (e.g., due to glacial melt,
+  or global warming of the ocean).  Report here the height above the
+  present-day geoid.  Over ocean, report as 0.0</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>land_area_fraction </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sftlf </p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>land_ice_area_fraction</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sftgif</p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>fraction of grid cell occupied by "permanent"
+  ice (i.e., glaciers).</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>soil_moisture_content_at_
+  field_capacity </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mrsofc </p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>divide the total water holding capacity of all the soil in
+  the grid cell by the land area in the grid cell;  report as
+  "missing" or 0.0 outside land areas.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A1c"><b><i>Table A1c: </i>Monthly-mean 3-d atmosphere data
+  (longitude, latitude, pressure, time:month).</b> Except for cloud area
+  fraction, this data must be provided on pressure levels, including at least
+  the following standard levels:1000, 925, 850, 700, 600, 500, 400, 300, 250,
+  200, 150, 100, 70, 50, 30, 20, 10 hPa. </a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>cloud_area_fraction_in_atmosphere_layer
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>cl </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>unlike all other fields in this table, the cloud fraction
+  should be reported for each model layer (not interpolated to standard
+  pressures).  Include both large-scale and convective cloud.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ta </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_wind </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ua </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_wind </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>va </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>specific_humidity </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hus </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (i.e.,
+  dimensionless fraction)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>6 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lagrangian_tendency_of_air_pressure
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>wap</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>commonly referred to as "omega", this represents
+  the vertical component of velocity in pressure coordinates (positive down)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>7 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>geopotential_height
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zg </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>8 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>relative_humidity </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hur </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>9 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>mole_fraction_of_o3_in_air
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tro3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1e-9 (i.e., ppbv)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>if climatologically specified, report only for 1 year.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1a"><b><i>Table O1a: </i>Monthly-mean 1-d ocean data
+  (latitude, region, time:month). </b>Zonal mean over all oceans and also zonal
+  mean for individual ocean basins (</a>Atlantic, Indian, and Pacific basins:
+  divide roughly at 20E and 120E). </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_heat_transport
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfogo </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>transport by all ocean-related processes, both explicitly
+  simulated and parameterized (e.g., any contribution from the 'bolus velocity'
+  in the Gent-McWilliams parameterization), including sea water and sea ice
+  contributions.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 width=898
+ style='width:673.5pt;border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1b"><b><i>Table O1b: </i>Monthly-mean 2-d ocean data
+  (latitude, depth, region, time:month). </b>Zonal mean over all oceans and
+  also zonal mean for individual ocean basins (</a>Atlantic, Indian, and
+  Pacific basins: divide roughly at 20E and 120E). Data must be provided on
+  depth levels.  We recommend that these match the 33 standard levels of
+  Levitus observations: 0, 10, 20, 30, 50, 75, 100, 125, 150, 200, 250, 300,
+  400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1750, 2000,
+  2500, 3000, 3500, 4000, 4500, 5000, and 5500 meters.</p>
+  </td>
+ </tr>
+ <tr>
+  <td width=10 style='width:.1in;border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td width=276 style='width:207.0pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td width=78 style='width:58.5pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=44 style='width:33.0pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td width=466 style='width:349.5pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr>
+  <td width=10 style='width:.1in;border:inset #111111 1.0pt;border-top:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td width=276 style='width:207.0pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ocean_meridional_overturning_streamfunction
+  </p>
+  </td>
+  <td width=78 style='width:58.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>stfmmc</p>
+  </td>
+  <td width=44 style='width:33.0pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m<sup>3</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td width=466 style='width:349.5pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Note that the units do not include mass.  This should
+  include only the explicitly calculated, purely advective component and should
+  exclude contributions of the 'bolus velocity' that arise, for example, in the
+  Gent-McWilliams parameterization.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 width="100%"
+ style='width:100.0%;border-collapse:collapse;border:none'>
+ <tr style='page-break-inside:avoid'>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1c"><b><i>Table O1c:</i> Monthly-mean 0-d or 2-d ocean or
+  sea ice data (longitude, latitude, time:month).</b></a></p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=65 style='width:48.75pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_surface_height_above_geoid</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zos</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>this height, when multiplied by the area fraction of the
+  grid cell covered by ocean (or sea ice), yields the volume of sea water above
+  the geoid.  As defined here, "the geoid" is a surface of
+  constant geopotential that, if the ocean were at rest, would coincide with
+  mean sea level. Under this definition, the geoid changes as the mean volume
+  of the ocean changes (e.g., due to glacial melt, or global warming of the
+  ocean).  Report zos as "missing" over grid cells that are
+  entirely land.  There are a couple of acceptable options for reporting
+  this field: 1) if the geoid is defined to relate to the instantaneous volume
+  of the ocean, the global mean of zos will always be zero, and 2) if the geoid
+  is defined relative to a time-mean sea level over some period, then the
+  global mean of zos will be time-dependent.  In either case a global mean
+  time-series of sea level should also be reported as described in the next two
+  table entries immediately below.  In general IPCC analysis of global
+  mean sea level changes will not rely on zos.  It is recommended that in
+  reporting zos, the atmospheric "inverted barometer" effect be
+  omitted, since it can be easily calculated from the reported mean sea level
+  pressure field.  The "comment" attribute associated with zos
+  should indicate whether or not the  atmospheric "inverted
+  barometer"  influence on zos has been included. Additionally, it should
+  be noted in the "comment" attribute whether zos is obtained
+  directly, as in a free-surface model, or has been derived, for example, from
+  geostrophy using diagnosed velocities at some level or from geostrophy
+  relative to an assumed level of quiescence. </p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='text-align:center'>2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>global_average_thermosteric_
+  sea_level_change</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zostoga</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>a function only of time, zostoga is the contribution to
+  change in global mean sea level, relative to some fixed distance from the
+  center of the earth, due only to thermal structure changes. The fixed
+  reference height should be invariant across all IPCC simulations by a
+  model.   In a rigid-lid model this quantity can be calculated by
+  using a reference 3D salinity field to compute density as the 3D temperature
+  field evolves.  If only the total sea level change (due to thermosteric
+  changes, water flux input from land/glaciers/atmosphere, and salinity
+  influences on density) is available, omit zostoga, and report only zosga (see
+  next table entry below).  Please note in the "comment"
+  attribute any assumptions or methodological details related to calculation of
+  this time-series.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='text-align:center'>3</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>global_average_sea_level_change</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zosga</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>a function only of time, zosga is the total change in
+  global mean sea level, relative to some fixed distance from the center of the
+  earth, due to thermosteric changes, water flux input from
+  land/glaciers/atmosphere, and salinity influences on density.  If the
+  model cannot be trusted to provide estimates of the water flux input from
+  land/glaciers, there is no need to report zosga (since salinity influences
+  are of secondary importance and the thermosteric contribution is reported by zostoga). 
+  Note that to good approximation the difference between zostoga and zosga
+  yields the global mean change in sea level due to water budget imbalances
+  (presumably, resulting largely from changes in glacial mass).  Please
+  note in the "comment" attribute any assumptions or methodological
+  details related to calculation of this time-series.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>4</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_surface_temperature
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tos</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>this may differ from "surface temperature" in
+  regions of sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_ice_area_fraction</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sic </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>fraction of grid cell covered by sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>6</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_ice_thickness</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sit </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>this thickness, when multiplied by the average area of the
+  grid cell covered by sea ice, yields the time-mean sea ice volume. 
+  Thus, for time means, compute as the weighted sum of thickness (averaged over
+  the sea ice-covered portion of the grid cell) divided by the sum of the
+  weights, with the weights equal to the area covered by sea-ice; Report as 0.0
+  in regions free of sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>7</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_sea_ice_velocity
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>usi</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>report as "missing" in regions free of sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>8</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_sea_ice_velocity
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>vsi</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>report as "missing" in regions free of sea ice.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>9</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>water_flux_into_ocean</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>wfo</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>precipitation minus evaporation, plus runoff, melting of
+  sea ice and any water flux correction calculated considering only the
+  ocean-portion of each grid cell</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ocean_barotropic_streamfunction
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>stfbarot </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m<sup>3</sup> s<sup>-1</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>units do not include mass.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>11</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>heat_flux_correction_where_ocean</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfcorr </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>if applicable, should be positive down (i.e., added to
+  ocean); the total flux correction entering the ocean portion of the grid cell
+  should be divided by the ocean area in the grid cell (in this context, ocean
+  includes sea ice); report only for a single year and a single run, assuming this
+  field is the same from year to year and for all runs.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>12</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>water_flux_correction_where_ocean</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>wfcorr </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2 </sup>s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>if applicable, should be positive down (i.e., added to
+  ocean); the total flux correction entering the ocean portion of the grid cell
+  should be divided by the ocean area in the grid cell (in this context, ocean
+  includes sea ice); report only for a single year and a single run, assuming
+  this field is the same from year to year and for all runs.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>13 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_momentum_flux_
+  correction_where_ocean</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tauucorr </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>if applicable, should be positive down (i.e., added to
+  ocean); the total flux correction entering the ocean portion of the grid cell
+  should be divided by the ocean area in the grid cell (in this context, ocean
+  includes sea ice); report only for a single year and a single run, assuming
+  this field is the same from year to year and for all runs.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>14 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_momentum_flux_
+  correction_where_ocean</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tauvcorr </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>if applicable, should be positive down (i.e., added to
+  ocean); the total flux correction entering the ocean portion of the grid cell
+  should be divided by the ocean area in the grid cell (in this context, ocean
+  includes sea ice); report only for a single year and a single run, assuming
+  this field is the same from year to year and for all runs.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 width=906
+ style='width:679.5pt;border-collapse:collapse;border:none'>
+ <tr>
+  <td width=906 colspan=5 style='width:679.5pt;border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1d"><b><i>Table O1d: </i>Time-independent 2-d ocean data
+  (longitude, latitude).</b></a></p>
+  </td>
+ </tr>
+ <tr>
+  <td width=12 style='width:9.05pt;border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td width=252 style='width:188.85pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td width=73 style='width:54.9pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=48 style='width:36.1pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td width=521 style='width:390.6pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td width=12 style='width:9.05pt;border:inset #111111 1.0pt;border-top:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td width=252 style='width:188.85pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_floor_depth_below_geoid</p>
+  </td>
+  <td width=73 style='width:54.9pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zobt </p>
+  </td>
+  <td width=48 style='width:36.1pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td width=521 style='width:390.6pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>this height, when multiplied by the area fraction of the
+  grid cell covered by ocean (or sea ice), yields the volume of water below the
+  geoid. As defined here, "the geoid" is a surface of constant
+  geopotential that, if the ocean were at rest, would coincide with mean sea
+  level. Under this definition, the geoid changes as the mean volume of the
+  ocean changes (e.g., due to glacial melt, or global warming of the
+  ocean).  Report here the sea floor depth for present day.</p>
+  </td>
+ </tr>
+ <tr>
+  <td width=12 style='width:9.05pt;border:inset #111111 1.0pt;border-top:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2</p>
+  </td>
+  <td width=252 style='width:188.85pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>prescribed_heat_flux_into_slab_ocean</p>
+  </td>
+  <td width=73 style='width:54.9pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>qflux</p>
+  </td>
+  <td width=48 style='width:36.1pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td width=521 style='width:390.6pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p style='margin:0in;margin-bottom:.0001pt'>the so-called q-flux added to
+  slab ocean cell, which is meant to account for convergence (or divergence) of
+  heat by the ocean circulation.  It should be computed as the total qflux
+  energy added to the ocean-portion of the grid cell divided by the ocean area
+  in the grid cell; report as "missing" or 0.0 where the ocean
+  fraction is 0.  Report only for slab ocean experiments.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1e"><b><i>Table O1e: </i>Monthly-mean 3-d ocean data
+  (longitude, latitude, depth, time:month).</b> Data must be provided on depth
+  levels.  We recommend that these match the 33 standard levels of Levitus
+  observations: 0, 10, 20, 30, 50, 75, 100, 125, 150, 200, 250, 300, 400, 500,
+  600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1750, 2000, 2500,
+  3000, 3500, 4000, 4500, 5000, and 5500 meters.  For the 3-d ocean
+  fields, it is likely that storage space constraints will limit relatively
+  quick access to output from only a single member of each ensemble, so in
+  prioritizing your processing, consider initially sending PCMDI  the 3-d
+  ocean output from only 1 member of the ensemble.  </a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_water_salinity </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>so </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1e-3 (i.e., ppt) </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>The unit of salinity is PSU (expressed here as parts per
+  thousand).</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_water_potential_temperature
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>thetao</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>assume reference height is sea level </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sea_water_potential_density
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rhopoto</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-3</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>assume reference height is sea level </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_sea_water_velocity
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>uo </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_sea_water_velocity
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>vo </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>6 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>upward_sea_water_velocity
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>wo </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<p> </p>
+
+<h3><span style='color:navy'>Daily-mean data</span></h3>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A2a"><b><i>Table A2a: </i></b>Daily-mean 2-d atmosphere
+  data (longitude, latitude, time:day).  It is recommended that the daily
+  means be computed for intervals beginning at 0 Z and ending the following </a>midnight at 0Z.  Except for  the temperature (mean, min., and max.) and
+  precipitation fields, the following daily-mean data should be provided for
+  just one ensemble member per scenario.  Also report data only for the
+  years specified in the table at the end of this document. </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=65 style='width:48.75pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure_at_sea_level
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>psl </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>precipitation_flux </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pr </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>includes both liquid and solid phases.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tasmin </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>daily-minimum near-surface (usually, 2 meter) air
+  temperature.  Consistent with the CF-conventions, the cell_methods
+  attribute should specify "time: minimum" (automatically done by
+  CMOR);  The CMOR singleton dimension default value of 2 m can be
+  overridden, if absolutely necessary, by redefining axis "height1".</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tasmax </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>daily-maximum near-surface (usually, 2 meter) air
+  temperature.  Consistent with the CF-conventions, the cell_methods
+  attribute should specify "time: maximum" (automatically done by
+  CMOR).  The CMOR singleton dimension default value of 2 m can be
+  overridden, if absolutely necessary, by redefining axis "height1".</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tas </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>daily-mean near-surface (usually, 2 meter) air
+  temperature;  The CMOR singleton dimension default value of 2 m can be
+  overridden, if absolutely necessary, by redefining axis "height1".</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>6 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upward_latent_heat_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfls </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>7 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upward_sensible_heat_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfss </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>8 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_longwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlds </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>9 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_longwave_flux_in_air
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlus </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_shortwave_flux_in_air
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsds </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>11 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_shortwave_flux_in_air
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsus </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>12 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_wind</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>uas </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>near-surface (usually, 10 meters) eastward component of
+  wind.  The CMOR singleton dimension default value of 10 m can be
+  overridden, if absolutely necessary, by redefining axis "height2".</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>13 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_wind</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>vas </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>near-surface (usually, 10 meters) northward component of
+  wind.  The CMOR singleton dimension default value of 10 m can be
+  overridden, if absolutely necessary, by redefining axis "height2".</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>14 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>toa_outgoing_longwave_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlut </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>at the top of the atmosphere (to be compared with
+  satellite measurements)</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A2b"><b><i>Table A2b: </i></b>Daily-mean 3-d atmosphere
+  data (longitude, latitude, pressure, time:day).  It is recommended that
+  the daily means be computed for intervals beginning at 0 Z and ending the
+  following </a>midnight at 0Z.  This data should be provided for just one
+  ensemble member per scenario, and for only the years specified in the table
+  at the end of this document. Also this data must be provided on pressure
+  levels, including at least the following subset of standard levels:1000, 925,
+  850, 700, 600, 500, 400, 300, 200 hPa.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ta </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>eastward_wind </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ua </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_wind </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>va </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m s<sup>-1</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>specific_humidity </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hus </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (i.e.,
+  dimensionless fraction) </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<b><span style='font-size:13.5pt;font-family:"Times New Roman";color:navy'><br
+clear=all style='page-break-before:always'>
+</span></b>
+
+<h3><span style='color:navy'>3-hourly data</span></h3>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A3"><b><i>Table A3: </i>3-bourly 2-d atmosphere data
+  (longitude, latitude, time:3hour at 0, 3, 6, 9, 12, 15, 18, 21 Z). </b>The
+  data should be provided for just one ensemble member per scenario, and for the
+  years specified in the table at the end of this document.  3-hourly
+  precipitation should be an average over the 3-hour intervals, 0-3Z, 3-6Z, ...
+  21-24Z; all other 3-hourly data should be instantaneous "snapshots"
+  at 0, 3, 6, ... 21Z.</a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=65 style='width:48.75pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure_at_sea_level
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>psl </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>precipitation_flux </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pr </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>includes both liquid and solid phases.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tas </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>near-surface (usually, 2 meter) air temperature (CMOR
+  singleton dimension table entry is "height1").</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upward_latent_heat_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfls </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upward_sensible_heat_flux
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfss </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>6 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_longwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlds </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>7 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_longwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rlus </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>8 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_downwelling_shortwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsds </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>9 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>surface_upwelling_shortwave_flux_in_air</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rsus </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<p> </p>
+
+<b><span style='font-size:13.5pt;font-family:"Times New Roman";color:navy'><br
+clear=all style='page-break-before:always'>
+</span></b>
+
+<h3><span style='color:navy'>Extremes indices</span></h3>
+
+<p>The following ten "extremes indices" are described in Frich, P,
+Alexander LV, Della-Marta P, Gleason B, Haylock M, Klein Tank AMG, Peterson T,
+2002: Observed coherent changes in climate extremes during the second half of
+the twentieth century, <i>Climate Research 19</i>: 193-212. Frich et al.
+describe these as "derived data in the form of annual indicator time
+series" and present them (as derived from observations) as a function of
+longitude, latitude, and year. See <a
+href="http://www.cru.uea.ac.uk/cru/projects/stardex">http://www.cru.uea.ac.uk/cru/projects/stardex</a>
+for sample computer code and documentation. </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=4 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A4"><b><i>Table A4: </i>Extremes indices (longitude,
+  latitude, time:year) from Frich et al. (their Table 1). </b></a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=70 style='width:52.5pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>fd </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>days </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Total number of frost days (days with absolute minimum
+  temperature < 0 deg C)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>etr </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Intra-annual extreme temperature range: difference between
+  the highest temperature of any given calendar year (T<sub>h</sub>) and the
+  lowest temperature of the same calendar year (T<sub>i</sub>)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>gsl </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>days </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Growing season length: period between when T<sub>day</sub>
+  > 5 deg C for > 5 d and T<sub>day</sub> < 5 deg C for > 5 d</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hwdi </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>days </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Heat wave duration index: maximum period > 5
+  consecutive days with T<sub>max</sub> > 5 deg C above the 1961-1990 daily
+  T<sub>max</sub> normal</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>5 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tn90 </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Fraction (expressed as a percentage) of time T<sub>min</sub>
+  > 90th percentile of daily minimum temperature, where percentiles are for
+  the 1961-1990 base period.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>6 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>r10 </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>days </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>No. of days with precipitation greater than or equal to 10
+  mm d<sup>-1</sup></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>7 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>cdd </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>days </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Maximum number of consecutive dry days (R<sub>day</sub>
+  < 1 mm)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>8 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>r5d </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Maximum 5 d precipitation total</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>9 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sdii </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2 </sup>s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Simple daily intensity index: annual total / number of R<sub>day</sub>
+  greater than or equal to 1 mm d<sup>-1</sup></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>r95t </p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>% </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Fraction (expressed as a percentage) of annual total
+  precipitation due to events exceeding the 1961-1990 95th percentile</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<p> </p>
+
+<h2><a name="Lower_priority_output">Lower priority output fields</a></h2>
+
+<h3><span style='color:navy'>ISCCP simulator output </span></h3>
+
+<p>Cloud-related output that matches the quantities observed by the
+International Satellite Cloud Climatology Project. This output is produced by
+the ISCCP simulator code and which usually must be run in the climate model,
+not as a post-processing step. See the Cloud Forcing Model Intercomparison Web
+site <a href="http://www.cfmip.net">(http://www.cfmip.net)</a> for details of
+the ISCCP simulator -- where to get code, settings for climate models, etc.</p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=4 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A1d"><b><i>Table A1d: Monthly-mean ISCCP simulator data
+  (longitude, latitude, pressure2, tau, time).  </i></b>Data should be
+  sampled no less frequently than every 15 hours.  The ISCCP cloud layers
+  refer to the following ranges (hPa): 800 and higher, 800-680, 680-560,
+  560-440, 440-310, 310-180, and 180-0.  The ISCCP optical depth (tau)
+  categories refer to the following ranges: 0-0.3, 0.3-1.3, 1.3-3.6, 3.6-9.4,
+  9.4-23, 23-60, and >60.  The preferred time periods and experiments
+  for which this data will be collected have not be agreed upon yet, but
+  discussions are underway.  Anyone having an opinion about this is
+  invited to participate in the discussion.</a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=50 style='width:37.5pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>isccp_cloud_area_fraction</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>clisccp</p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (i.e.,
+  dimensionless fraction)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>as seen from above, mean fraction of grid column occupied
+  by cloud of optical depths and heights specified by the tau and pressure
+  intervals given above;  for each longitude and latitude grid column, the
+  ISCCP simulator output comprises a 7x7 (pressure x tau) matrix of values matching
+  those of the satellite. With CMOR, use "pressure2" to define the
+  vertical coordinates for this variable.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<h3><span style='color:navy'>Radiative forcing </span></h3>
+
+<p>To enable an analysis of feedbacks, which explain differences in model
+sensitivity, the WGCM urges groups to calculate, if at all practical, the
+clear-sky and all-sky shortwave and longwave radiative forcing. These four
+fields should be a function of longitude latitude and time (monthly sampling).
+No standard method for calculating radiative forcing has been agreed on by the
+WGCM, but one good option would be to follow the method suggested in Appendix A
+of a letter from the IPCC co-chairs (see <a href="Appendix_A.php">http://www-pcmdi.llnl.gov/ipcc/Appendix_A.php</a>).
+The highest priority (and easiest) calculation of this kind is to calculate
+monthly-mean values of radiative forcing for doubled CO2. Calculation of
+clear-sky radiative forcing as well as all-sky forcing will make it possible to
+estimate the importance of cloud feedbacks in the 1% / year CO2 simulations and
+the 2xCO2 equilibrium simulations (assuming the radiative forcing scales with
+the logarithm of CO2 concentration). The evolution of forcing fields for any
+and all other climate change agents are also welcome.  A rough priority
+for forcing calculations follows:</p>
+
+<ol start=1 type=1>
+ <li class=MsoNormal>CO2 doubling (<i>Please provide this at the very least!</i>)</li>
+ <li class=MsoNormal>Total forcing (from all anthropogenic influences) for SRES
+     A1b, B1, and A2 (reported at least at the end of the simulation, and as
+     frequently as necessary to characterize, approximately, the forcing changes
+     throughout the experiment.</li>
+ <li class=MsoNormal>CO2 quadrupling( to check that logarithmic scaling holds).</li>
+ <li class=MsoNormal>Total anthropogenic forcing for the historical run
+     (sampled every 10 years or more frequently)</li>
+ <li class=MsoNormal>Total natural forcing (if any) for the historical run
+     (sampled as frequently as necessary)</li>
+ <li class=MsoNormal>Forcing due to individual constituents (e.g., volcanic
+     aerosols, anthropogenic aerosols, individual greenhouse gases) for the
+     historical run.</li>
+ <li class=MsoNormal>Forcing due to individual constituents for the experiments
+     listed in 2.</li>
+</ol>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_A5"><b><i>Table A5:</i> Monthly-mean 2-d radiative forcing
+  data (longitude, latitude, time). </b>For the following output fields choose
+  the variable name corresponding to the method you used to calculate radiative
+  forcing and replace the "?" suffix with one of the following
+  abbreviations for different forcing agents: g (all greenhouse gases), co2
+  (carbon dioxide only), s (total sulfate aerosol), sd  (direct effect
+  only of sulfate aersol), si (indirect effect only of sulfate aerosols), bc
+  ("black carbon"), o (ozone), to (tropospheric ozone only), so
+  (stratospheric ozone only), l (vegetation and other land surface
+  changes),  a (all anthropogenic factors, inclusive), v (volcanic
+  aerosols), sun (solar constant changes), or n (all natural factors,
+  inclusive).  Use the term that is most specific (e.g., if the only
+  anthropogenic effect included in the model simulation is an increase in
+  carbon dioxide, use "co2", not "a" or
+  "g").  A complete example is: rsftoaa_a.</a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=50 style='width:37.5pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_adjusted_shortwave_forcing</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_adjusted_shortwave_forcing</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_instantaneous_shortwave_forcing</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_instantaneous_shortwave_forcing</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftoaa_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftropa_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftoai_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftropi_?</p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup> 
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>all-sky conditions, defined to be positive down. Choose
+  appropriate variable, and indicate in the "comment" attribute
+  (associated with the variable) any particulars (e.g., 200 hPa taken as
+  approximate tropopause). For tropopause, CMOR will by default record a
+  singleton dimension value of 200 hPa.  To override this value redefine
+  pressure1.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_adjusted_longwave_forcing</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_adjusted_longwave_forcing</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_instantaneous_longwave_forcing</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_instantaneous_longwave_forcing</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftoaa_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftropa_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftoai_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftropi_?</p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>all-sky conditions, defined to be positive down. Choose
+  appropriate variable, and indicate in the "comment" attribute
+  (associated with the variable) any particulars (e.g., 200 hPa taken as
+  approximate tropopause).  For tropopause, CMOR will by default record a
+  singleton dimension value of 200 hPa.   To override this value
+  redefine pressure1.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_adjusted_shortwave_forcing_assuming_clear_sky</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_adjusted_shortwave_forcing_assuming_clear_sky</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_instantaneous_shortwave_forcing_assuming_clear_sky</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_instantaneous_shortwave_forcing_assuming_clear_sky</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftoaacs_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftropacs_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftoaics_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rsftropics_?</p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>clear-sky calculation, defined to be positive down. Choose
+  appropriate variable, and indicate in the "comment" attribute
+  (associated with the variable) any particulars (e.g., 200 hPa taken as
+  approximate tropopause).  For tropopause, CMOR will by default record a
+  singleton dimension value of 200 hPa.   To override this value
+  redefine pressure1.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_adjusted_longwave_forcing_assuming_clear_sky</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_adjusted_longwave_forcing_assuming_clear_sky</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>toa_instantaneous_longwave_forcing_assuming_clear_sky</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>tropopause_instantaneous_longwave_forcing_assuming_clear_sky</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftoaacs_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftropacs_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftoaics_?</p>
+  <p align=center style='margin:0in;margin-bottom:.0001pt;text-align:center'>rlftropics_?</p>
+  </td>
+  <td width=50 style='width:37.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>clear-sky calculation, defined to be positive down. Choose
+  appropriate variable, and indicate in the "comment" attribute
+  (associated with the variable) any particulars (e.g., 200 hPa taken as
+  approximate tropopause).  For tropopause, CMOR will by default record a
+  singleton dimension value of 200 hPa.   To override this value
+  redefine pressure1.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<b><span style='font-size:13.5pt;font-family:"Times New Roman";color:navy'><br
+clear=all style='page-break-before:always'>
+</span></b>
+
+<h3><span style='color:navy'>Sulfate aerosol data </span></h3>
+
+<p>Provide both the column integrated 2-D fields and the 3-D fields on the
+following pressure levels: 1004, 983, 953, 910, 848, 765, 663, 546, 425, 318,
+238, 183, 140, 103, 72, 47, 27, 13, and 4 hPa.</p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr style='height:30.0pt'>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p><a name="Table_A1e"><b><i>Table A1e:</i> Monthly-mean 2-d and 3-d sulfate
+  aerosol fields.</b></a></p>
+  </td>
+ </tr>
+ <tr style='height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p align=center style='text-align:center'><b>CF standard_name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p align=center style='text-align:center'><b>output variable name </b></p>
+  </td>
+  <td width=80 style='width:60.0pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr style='height:16.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p>1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p align=center style='text-align:center'>mass_concentration_of_sulfate_aerosol_in_air
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p align=center style='text-align:center'>trsul</p>
+  </td>
+  <td width=80 style='width:60.0pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:16.5pt'>
+  <p align=center style='text-align:center'>1e-9 kg m<sup>-3</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:16.5pt'>
+  <p>3-d field (longitude, latitude, pressure3, time)</p>
+  </td>
+ </tr>
+ <tr style='height:25.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:25.5pt'>
+  <p>2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p align=center style='text-align:center'>atmosphere_content_of_sulfate_aerosol</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p align=center style='text-align:center'>trsult</p>
+  </td>
+  <td width=80 style='width:60.0pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:25.5pt'>
+  <p align=center style='text-align:center'>1e-6 kg m<sup>-2</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p>2-d field, vertically integrated through atmospheric column (longitude,
+  latitude, time)</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<h3><span style='color:navy'>Additional Monthly-mean fields </span></h3>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1f"><b><i>Table O1f: </i>Monthly-mean 1-d and 2-d ocean
+  fields. </b></a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=70 style='width:52.5pt;border:inset #111111 1.0pt;border-left:none;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>ocean_mixed_layer_thickness</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zmlo</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>mixed layer depth; (longitude, latitude, time).  No
+  agreement has been reached as to the precise definition of the mixed layer
+  depth, so this field may be of limited value.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_heat_transport_due_to_diffusion</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>htovdiff</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>vertically integrated northward heat transport by
+  unresolved processes, summed over longitude for each of 3 basins (Atlantic,
+  Indian, Pacific) and global ocean; (latitude, region, time); include
+  specifically contributions of the 'bolus velocity' that arise, for example,
+  in the Gent-McWilliams parameterization.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_heat_transport_due_to_gyre</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>htovgyre</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>vertically integrated northward heat transport by gyre
+  circulation (including heat advection by sea ice), summed over longitude for
+  each of 3 basins (Atlantic, Indian, Pacific) and global ocean; (latitude,
+  region, time); exclude contributions of the 'bolus velocity' that arise, for
+  example, in the Gent-McWilliams parameterization.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>4</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_heat_transport_due_to_overturning</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>htovovrt</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>vertically integrated northward heat transport by
+  overturning circulation, summed over longitude for each of 3 basins
+  (Atlantic, Indian, Pacific) and global ocean; (latitude, region, time);
+  exclude contributions of the 'bolus velocity' that arise, for example, in the
+  Gent-McWilliams parameterization.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>5</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_salt_transport_due_to_diffusion</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sltovdiff</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg s<sup>-1</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>vertically integrated northward salt transport by
+  unresolved processes, summed over longitude for each of 3 basins (Atlantic, Indian, Pacific) and global ocean; (latitude, region, time)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>6</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_salt_transport_due_to_gyre</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sltovgyre</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg s<sup>-1</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>vertically integrated northward salt transport by gyre
+  circulation (including salt advection by sea ice), summed over longitude for
+  each of 3 basins (Atlantic, Indian, Pacific) and global ocean; (latitude,
+  region, time)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>7</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>northward_ocean_salt_transport_due_to_overturning</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sltovovrt</p>
+  </td>
+  <td width=70 style='width:52.5pt;border-top:none;border-left:none;border-bottom:
+  inset #111111 1.0pt;border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg s<sup>-1</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>vertically integrated northward salt transport by
+  overturning circulation, summed over longitude for each of 3 basins (Atlantic, Indian, Pacific) and global ocean; (latitude, region, time)</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><a name="Table_O1g"><b><i>Table O1g: </i>Monthly-mean 2-d sea ice fields
+  (longitude, latitude, time:month).</b></a></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=75 style='width:56.25pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>water_evaporation_flux_where_sea_ice</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sbl</p>
+  </td>
+  <td width=75 style='width:56.25pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Compute the average rate that water mass evaporates (or
+  sublimates) from the sea ice surface (i.e., kg/s) divided by the average area
+  of the grid cell covered by sea ice. This quantity multiplied both by the
+  average area covered by sea ice and by the length of the month should yield
+  the total mass of water evaporated (or sublimated) from the sea ice. 
+  Report as 0.0 in regions free of sea ice.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>upward_sea_ice_basal_heat_flux</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hfsib</p>
+  </td>
+  <td width=75 style='width:56.25pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>W m<sup>-2</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Compute the average rate that heat flows up at the base of
+  the sea ice (i.e., Watts) divided by the average area of the grid cell
+  covered by sea ice. This quantity multiplied both by the average area covered
+  by sea ice and by the length of the month should yield the total energy
+  flowing into the ice from below. Report as 0.0 in regions free of sea ice.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>3</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>downward_sea_ice_basal_salt_flux</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>sltfsib</p>
+  </td>
+  <td width=75 style='width:56.25pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup></p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>Compute the average rate that salt mass flows down at the
+  base of the sea ice (i.e., kg/s) divided by the average area of the grid cell
+  covered by sea ice. This quantity multiplied both by the average area covered
+  by sea ice and by the length of the month should yield the total salt mass
+  flowing into the ocean at the base of the sea ice. Report as 0.0 in regions
+  free of sea ice.</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<span style='font-size:12.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span>
+
+<p> </p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr style='height:44.25pt'>
+  <td colspan=5 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p><a name="Table_A1f"><b><i>Table A1f: </i>Monthly-mean surface fields, and
+  prescribed land surface characteristics.</b></a></p>
+  </td>
+ </tr>
+ <tr style='height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output variable
+  name </b></p>
+  </td>
+  <td width=65 style='width:48.75pt;border:inset #111111 1.0pt;border-left:
+  none;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>notes</b></p>
+  </td>
+ </tr>
+ <tr style='height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal>1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>precipitation_flux_onto_canopy</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>prveg</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>As a function of longitude, latitude, and time, report the
+  precipitation flux intercepted by vegetation canopy (if present in model),
+  averaged over only the land portion of the grid cell; report as
+  "missing" or 0.0 where the land fraction is 0;  </p>
+  </td>
+ </tr>
+ <tr style='height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal>2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>water_evaporation_flux_from_canopy</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>evspsblveg</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>kg m<sup>-2</sup> s<sup>-1</sup>
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p class=MsoNormal>As a function of longitude, latitude, and time, report the
+  canopy evaporation+sublimation (if present in model), averaged only over the
+  land portion of the grid cell; report as "missing" or 0.0 where the
+  land fraction is 0;  </p>
+  </td>
+ </tr>
+ <tr style='height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal>3</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_boundary_layer_thickness</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>zmla</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>As a function of longitude, latitude, and time, report the
+  height of the atmospheric boundary layer (if defined in model); No agreement
+  has been reached as to the precise definition of this quantity, so this field
+  may be of limited value.</p>
+  </td>
+ </tr>
+ <tr style='height:.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:.75pt'>
+  <p class=MsoNormal>4</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>root_depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>rootd</p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal>As a function of longitude and latitude, report the
+  maximum soil depth reachable by plant roots, i.e., the maximum soil depth
+  from which they can extract moisture (if defined in model); report as
+  "missing" or 0.0 where the land fraction is 0;  </p>
+  </td>
+ </tr>
+ <tr style='height:.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:.75pt'>
+  <p class=MsoNormal>5</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tasmin </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal>monthly mean of the daily-minimum near-surface (usually, 2
+  meter) air temperature.  Consistent with the CF-conventions, the
+  cell_methods attribute should specify "time: minimum within days time:
+  mean over days" (automatically done by CMOR);  The CMOR singleton
+  dimension default value of 2 m can be overridden, if absolutely necessary, by
+  redefining axis "height1".</p>
+  </td>
+ </tr>
+ <tr style='height:.75pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:.75pt'>
+  <p class=MsoNormal>6</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_temperature</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tasmax </p>
+  </td>
+  <td width=65 style='width:48.75pt;border-top:none;border-left:none;
+  border-bottom:inset #111111 1.0pt;border-right:inset #111111 1.0pt;
+  padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal align=center style='text-align:center'>K </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:.75pt'>
+  <p class=MsoNormal>monthly mean of the daily-maximum near-surface (usually, 2
+  meter) air temperature.  Consistent with the CF-conventions, the
+  cell_methods attribute should specify "time: maximum within days time:
+  mean over days" (automatically done by CMOR);  The CMOR singleton
+  dimension default value of 2 m can be overridden, if absolutely necessary, by
+  redefining axis "height1".</p>
+  </td>
+ </tr>
+</table>
+
+<div class=MsoNormal align=center style='text-align:center'>
+
+<hr size=2 width="100%" align=center>
+
+</div>
+
+<p> </p>
+
+<h2><a name="Coordinate_dimensions.">Coordinate dimensions.</a></h2>
+
+<p>In the tables given above, variables are a function of various coordinate
+variables, which are stored in the netCDF files with the following names and
+units:</p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr>
+  <td colspan=7 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p><b><i>Table of Coordinate Dimensions.</i></b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CF standard_name
+  </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>output
+  coordinate variable name </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>CMOR table
+  "entry" I.D.</b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>units</b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>default value of
+  scalar dimension</b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> notes </b></p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>longitude </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lon</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>longitude</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>degrees_east</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>latitude </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lat </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>latitude</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>degrees_north</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal> </p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>3 </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>time </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>time</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>time</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p>days_since_??</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>where ?? should be specified in the form year-month-day
+  (e.g., days_since_1800-1-1).</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>4</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>time</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>time</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>time1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>days_since_??</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used for 3-hourly "snapshot" fields in Table A3,
+  where the cell_bounds attribute should be omitted for the time dimension.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>5</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>plev </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pressure</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used for all fields that are a function of pressure except
+  those listed in the next 3 rows below.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>6</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>plev</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pressure1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>20000.</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by some near-tropopause radiation fluxes (Table A1a,
+  entries 33-36), and some radiative forcing fields (Table A5, entries 1-4)</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>7</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>plev</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pressure2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by clisccp in Table A1d</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>8</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>air_pressure</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>plev</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>pressure3</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>Pa</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by trsul in Table A1e</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>9</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>height</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>height </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>height1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2.</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by tas, huss, tasmin and tasmax in Tables A1a, A2a,
+  and A3.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>height</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>height </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>height2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10.</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by uas and vas in Tables A1a and A2a.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>11</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>depth1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>0.05</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by mrsos in Table A1a; bounds for this scalar
+  dimension should be 0.0 and 0.1 m.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>12</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>cloud_optical_depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tau</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>tau</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>used by clisccp in Table A1d</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>13</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_sigma_coordinate
+  </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lev </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>standard_sigma</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (dimensionless)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>one choice of dimensionless vertical coordinate needed for
+  cl field (cloud fraction).  The following parameters (specified by the
+  CF-standard) are also needed to fully describe this coordinate: ptop, sigma,
+  and ps.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>14</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_hybrid_sigma_
+  pressure_coordinate</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lev</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>standard_hybrid_sigma</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (dimensionless)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>one choice of dimensionless vertical coordinate needed for
+  cl field (cloud fraction). The following parameters (specified by the
+  CF-standard) are also needed to fully describe this coordinate: p0, a, b, and
+  ps.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>15</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_hybrid_sigma_
+  pressure_coordinate</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lev</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>alternate_hybrid_sigma</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1 (dimensionless)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>one choice of dimensionless vertical coordinate needed for
+  cl field (cloud fraction).  The following parameters (specified by the
+  CF-standard) are also needed to fully describe this coordinate: p0, ap, b,
+  and ps.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>16</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>atmosphere_hybrid_</p>
+  <p class=MsoNormal align=center style='text-align:center'>height_coordinate</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>lev</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>hybrid_height</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1</p>
+  <p class=MsoNormal align=center style='text-align:center'>(dimensionless)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>one choice of dimensionless vertical coordinate needed for
+  cl field (cloud fraction).� The following parameters (specified by the
+  CF-standard) are also needed to fully describe this coordinate: a, b, and
+  orog.</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>17</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>depth</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>m</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>for some ocean fields</p>
+  </td>
+ </tr>
+ <tr>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>18</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>region</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>region</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>none</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'> </p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt'>
+  <p class=MsoNormal>this coordinate is a simple index.  A variable named
+  geo_region must also be stored with the four values:
+  "atlantic_ocean", "indian_ocean",
+  "pacific_ocean", and "global_ocean".</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+<p> </p>
+
+<b><span style='font-size:18.0pt;font-family:"Times New Roman"'><br clear=all
+style='page-break-before:always'>
+</span></b>
+
+<h2><a name=Experiments>Experiments and time periods for which data should be
+submitted:</a></h2>
+
+<p>A figure summarizing the reporting periods is available at <a
+href="http://www-pcmdi.llnl.gov/ipcc/IPCC_output_requirements.htm">http://www-pcmdi.llnl.gov/ipcc/output_periods.pdf</a>,
+but more precise information is provided below. The following table indicates
+for each IPCC simulation the years for which output should be submitted to the
+PCMDI archive.  All time intervals should be interpreted as extending from
+the beginning of the first year indicated through the end of the last year
+indicated.  For example, years 1961-2000 means 0Z 1-1-2000 through 0Z 1-1-2001.</p>
+
+<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
+ style='border-collapse:collapse;border:none'>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td colspan=6 style='border:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:58.5pt'>
+  <p><b><i>Table of Experiments.</i></b></p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:58.5pt'>
+  <td style='border:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> </b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>Experiment Name</b></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>Monthly Data and
+  Yearly Data (Extreme Indices)  </b><span style='font-size:10.0pt'>(submit
+  for each member of ensemble)</span></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>Daily Data </b><span
+  style='font-size:10.0pt'>(temperature and precipitation data should be
+  submitted for each member of ensemble, but all other fields should be submitted
+  for only a single ensemble member)</span></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b>3-Hourly Data </b><span
+  style='font-size:10.0pt'>(submit for a single ensemble member)</span></p>
+  </td>
+  <td style='border:inset #111111 1.0pt;border-left:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:58.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'><b> Notes </b></p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>pre-industrial control experiment</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>> 100
+  years  (~500 years)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>40 years that can
+  best be compared to years 1961-2000 (i.e., through the end of year 2000) of the
+  20C3M expt.</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last year of
+  reported daily data (i.e., corresponding to year 2000 of the 20C3M expt.)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>control for experiments 3-7 and for some models also the
+  control for experiments 8-9.  There will be no anthropogenic or natural
+  forcing in this control.  The control experiment should be long enough
+  to extend to the furthest point in time reached by the end of the
+  perturbation experiments (which presumably branch from it).  Thus the
+  control should allow us to subtract any residual, unforced drift from all perturbation
+  simulations.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>present-day control experiment</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>> 100
+  years  (~300 years)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last 20 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last year</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>for most models this experiment is not needed, but for
+  some it is the control for experiments 8-9.  There will be no natural
+  forcing and anthropogenic influences will be set at present-day level. 
+  The control experiment should be long enough to extend to the furthest point
+  in time reached by the end of the perturbation experiments (which branch from
+  it).  Thus the control should allow us to subtract any residual,
+  unforced drift from the perturbation simulations.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>3</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>climate of the 20th Century experiment (20C3M)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>~1850 - present</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1961 - 2000 (i.e.,
+  through the end of year 2000)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1991-2000 (i.e.,
+  through the end of year 2000)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>should initialize from a point early enough in the
+  pre-industrial control run to ensure that the end of all the perturbed runs
+  branching from the end of this 20C3M run end before the end of the
+  control.  This will enable us to subtract any residual drift in the
+  control from all runs that will be compared to it.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>4</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>committed climate change experiment</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>present - 2100</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2046-2065, 2081 -
+  2100</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2050, 2100</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>should take the end of the 20C3M run as its initial
+  condition.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>5</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>SRES A2 experiment</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>present - 2100</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2046 - 2065, 2081 -
+  2100</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2050, 2100</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>should take the end of the 20C3M run as its initial
+  condition.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>6</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>720 ppm stabilization experiment (SRES A1B)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>present - 2300
+  (present - 2200)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2046 - 2065,
+  2081-2100, 2181-2200, 2281-2300</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2050, 2100, 2150,
+  2200, 2300</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>Impose SRES A1B conditions and initialize with conditions
+  from the end of the 20C3M simulation and run to 2100, after which hold
+  concentrations fixed and continue run to 2200.  One member of the
+  ensemble should be extended for an additional 100 years (to 2300), continuing
+  to hold concentrations fixed.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>7</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>550 ppm stabilization experiment (SRES B1)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>present - 2300
+  (present - 2200)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2046 - 2065,
+  2081-2100, 2181-2200, 2281-2300</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2050, 2100, 2150,
+  2200, 2300</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>Impose SRES B1 conditions and initialize with conditions
+  from the end of the 20C3M simulation and run to 2100, after which hold
+  concentrations fixed and continue run to 2200.  One member of the
+  ensemble should be extended for an additional 100 years (to 2300), continuing
+  to hold concentrations fixed.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>8</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>1%/year CO2 increase experiment (to doubling)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>~70 years to
+  doubling + an additional 150 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>20 years centered
+  on time of doubling + last 20 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>at doubling and 150
+  years after doubling</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>Hold CO2 fixed after reaching doubled concentration. 
+  This run should be initialized from a point either within a present-day
+  control run or a pre-industrial control run.  Make sure that the initial
+  time is early enough in the control run to subtract out any residual
+  (unforced) drift that might occur over the 220 years of this experiment.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:44.25pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>9</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>1%/year CO2 increase experiment (to quadrupling)</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>~140 years to
+  quadrupling + an additional 150 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>20 years centered
+  on time of quadrupling + last 20 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal align=center style='text-align:center'>at quadrupling and
+  150 years after quadrupling</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:44.25pt'>
+  <p class=MsoNormal>Hold CO2 fixed after reaching quadrupled concentration. 
+  This run should be initialized from a point either within a pre-industrial
+  control run or a present-day control run.  Make sure that the initial
+  time is early enough in the control run to subtract out any residual
+  (unforced) drift that might occur over the 290 years of this experiment.</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:25.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>10</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal>slab ocean control experiment</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>~100 years??</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last 20 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last year</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal>slab ocean control for experiment 11.  Be sure to run
+  long enough to reach a true equilibrium state and to produce stable
+  statistics (at least 20 years beyond equilibrium).</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:30.0pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>11</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>2xCO2 equilibrium experiment</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>~100 years??</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last 20 years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal align=center style='text-align:center'>last year</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:30.0pt'>
+  <p class=MsoNormal>slab ocean experiment with an instantaneous
+  doubling.  There is interest in the transient response to the
+  instantaneous doubling, so please report all years and be sure to run long
+  enough to reach a true equilibrium state and to produce stable statistics (at
+  least 20 years beyond equilibrium).</p>
+  </td>
+ </tr>
+ <tr style='page-break-inside:avoid;height:25.5pt'>
+  <td style='border:inset #111111 1.0pt;border-top:none;padding:1.5pt 1.5pt 1.5pt 1.5pt;
+  height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>12</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal>AMIP simulation</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>1979 - present</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>all years</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal align=center style='text-align:center'>2000</p>
+  </td>
+  <td style='border-top:none;border-left:none;border-bottom:inset #111111 1.0pt;
+  border-right:inset #111111 1.0pt;padding:1.5pt 1.5pt 1.5pt 1.5pt;height:25.5pt'>
+  <p class=MsoNormal>atmospheric component should be identical to that used in
+  the above experiments</p>
+  </td>
+ </tr>
+</table>
+
+<p> </p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/Doc/standard_output.pdf b/Doc/standard_output.pdf
new file mode 100644
index 0000000..31d4f09
Binary files /dev/null and b/Doc/standard_output.pdf differ
diff --git a/Doc/standard_output_updates.htm b/Doc/standard_output_updates.htm
new file mode 100644
index 0000000..e8f6e11
--- /dev/null
+++ b/Doc/standard_output_updates.htm
@@ -0,0 +1,256 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>History of Changes Made to IPCC Standard Output</title>
+<style>
+<!--
+ li.MsoNormal
+	{mso-style-parent:"";
+	margin-bottom:.0001pt;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	margin-left:0in; margin-right:0in; margin-top:0in}
+ table.MsoNormalTable
+	{mso-style-parent:"";
+	font-size:10.0pt;
+	font-family:"Times New Roman"}
+-->
+</style>
+</head>
+
+<body>
+
+<p align="center"><b><font size="4">History of Changes Made to IPCC Standard 
+Output</font></b></p>
+<p align="left"><b>16 October 2007:</b></p>
+<ol>
+  <li>
+<p align="left">Corrected notes for entry 44 in table A1a (clivi) to indicate that
+ only the solid-phase water (not the liquid or vapor)should be considered in 
+calculating the atmosphere cloud ice content. </p>
+  </li>
+</ol>
+<p align="left"><b>15 September 2005:</b></p>
+<ol>
+  <li>
+<p align="left">Added accommodation for the hybrid height coordinate, which 
+appears in the Hadley Centre models.  Also included depth coordinate for 
+ocean fields, which had been previously inadvertently omitted.</p>
+  </li>
+</ol>
+<p align="left"><b>7 December 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Added the following clarification for the 
+global_average_thermosteric_sea_level_change: "<span style="font-size: 12.0pt; font-family: Times New Roman">In 
+a rigid-lid model this quantity can be calculated by using a reference 3D 
+salinity field to compute density as the 3D temperature field evolves."</span></p>
+  </li>
+  <li>
+<p align="left"><span style="font-family: Times New Roman">Added a 
+recommendation that daily mean data be computed for intervals beginning at 
+midnight, i.e., 0 Z (UTC), and ending the following midnight at 0 Z.</span></p>
+  </li>
+</ol>
+<p align="left"><b>22 November 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Replace occurrences of zostogm with zostoga and zosgm with zosga.</p>
+  </li>
+</ol>
+<p align="left"><b>17 November 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Clarified how zos should be computed.</p>
+  </li>
+  <li>
+<p align="left">Added zostoga and zosga to list of high priority output 
+variables (Table 
+O1c).</p>
+  </li>
+  <li>
+<p align="left">Added to Table O1d the "qflux" as a high priority 
+field for slab ocean experiments.</p>
+  </li>
+  <li>
+<p align="left">Added monthly-mean tasmin and tasmax to Table A1f.</p>
+  </li>
+  <li>
+<p align="left">For mrfso, indicated explicitly in the comment column that it 
+was frozen water only that should be considered.</p>
+  </li>
+  <li>
+<p align="left">Expanded descriptions of clwvi and clivi.</p>
+  </li>
+  <li>
+<p align="left">Indicated that ISSCP simulator output should be generated from 
+data sampled no less frequently than every 15 hours.</p>
+  </li>
+  <li>
+<p align="left">Noted that htovgyre and htovovrt should exlcude 'bolus velocity' 
+contributions from the Gent-McWilliams parameterization; further noted that 
+htovdiff and
+hfogo should include any 'bolus velocity' contribution.</p>
+  </li>
+  <li>
+<p align="left">Specified that in calculating wfo, zos, and zobt, only the ocean portion of 
+each grid cell should be considered.</p>
+  </li>
+  <li>
+<p align="left">Changed 'atmospheric_boundary_layer_thickness' to 'atmosphere_boundary_layer_thickness'.</p>
+  </li>
+  <li>
+<p align="left">We now request that in identifying forcing agents (table A5) the 
+term that is "most specific", not "most general" should be used (e.g., if the only anthropogenic effect included in the 
+model simulation is an increase in carbon dioxide, use "co2", not "a" or "g").  </p>
+  </li>
+  <li>
+<p align="left">Corrected the cell_methods attribute associated with the 
+time-dimension for daily maximum and minimum surface air temperature.</p>
+  </li>
+</ol>
+<p align="left"><b>30 September 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Corrected length of first ensemble member requested for the 550 
+ppm stabilization experiment (SRES B1): changed last year from 2200 to 2300.</p>
+  </li>
+  <li>
+<p align="left">Added 20 year interval to the daily data requested for each of 
+the 1%/yr CO2 experiments: 20 years centered on time of doubling for doubling 
+experiment. and 20 years centered on time of quadrupling for the quadrupling 
+experiment.</p>
+  </li>
+  <li>
+<p align="left">Included a table of contents with links to sections of the 
+document.</p>
+  </li>
+</ol>
+<p align="left"><b>15 September 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Noted that 3-hourly precipitation data should be averaged over 
+the intervals 0-3Z, 3-6Z, ... 21-24Z, whereas the "snapshots" should be sampled 
+at 0, 3, 6, ... 21Z.</p>
+  </li>
+  <li>
+<p align="left">Noted that stfmmc should exclude 'bolus velocity' contribution 
+from the Gent-McWilliams parameterization.</p>
+  </li>
+  <li>Clarified that all time intervals in the last table of experiments should 
+  be interpreted as extending from the beginning of the first year indicated 
+  through the end of the last year indicated.  For example, years 1961-2000 
+  means 0Z 1-1-2000 through 0Z 1-1-2001.</li>
+  <li>Added a row to the coordinate dimension table for 'time1' which is needed 
+  in the 3-hourly table (A3) to define the time axis for "snapshot" (rather than 
+  time-mean) data (i.e., all but the precipitation field in this table).</li>
+</ol>
+<p align="left"><b>3 September 2004:</b></p>
+<p align="left">Revised web links to be consistent with new PCMDI web site.</p>
+<p align="left"><b>25 August 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Clarified in the last table that yearly data (i.e., extreme 
+indices) should be submitted for the same years as the monthly data.</p>
+  </li>
+</ol>
+<p align="left"><b>2 August 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Changed period for which 3-hourly data should be reported in the 
+"pre-industrial control experiment" from "last year" to "last year of reported 
+daily data (i.e., corresponding to year 2000 of the 20C3M expt.)".</p>
+  </li>
+  <li>
+<p align="left">Modified description of a few fields to make them clearer.</p>
+  </li>
+</ol>
+<p align="left"><b>20 July 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Changed years requested for the committed climate change 
+experiment from tables A2a,b to be consistent with other experiments (i.e., 
+2046-2065, not 2031-2050).</p>
+  </li>
+</ol>
+<p align="left"><b>19 July 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Changed one of the experiment names in the last table of the 
+document: 'climate of the 20<sup>th</sup> Century (20C3M)' was changed to 
+'climate of the 20<sup>th</sup> Century experiment (20C3M)'.</p>
+  </li>
+</ol>
+<p align="left"><b>14 July 2004:</b></p>
+<ol>
+  <li>
+<p align="left">Added table of experiments and years of requested data.</p>
+  </li>
+  <li>
+<p align="left">Moved dimension table to near the end of the document.</p>
+  </li>
+  <li>
+<p align="left">Noted that "flux-correction" fields need to be reported only for 
+a single year, assuming it applies to all experiments.</p>
+  </li>
+  <li>
+<p align="left">Noted that disk space constraints will likely limit quick access 
+to monthly-mean 3-d ocean output to a single member of each ensemble.</p>
+  </li>
+  <li>
+<p align="left">Noted that daily data should only be reported for a single 
+member of each ensemble, except for the surface air temperature (mean, max. and 
+min.) and precipitation, which should be reported for all members.</p>
+  </li>
+</ol>
+<p><b>5 July 2004:</b></p>
+<ol>
+  <li>The requested fields listed under  
+  "Highest priority output fields" were not changed, but some of the 
+  information given there was modified.</li>
+  <li>The "PCMDI names" are now identified as "output variable names", because 
+  these are the variable names that should appear in the netCDF files.  
+  These also serve as unique reference names for CMOR.  Several names were 
+  changed in this version to make them consistent with the existing CMIP data 
+  base: ssh ==> zos, sst ==> tos, siu==>usi, siv==>vsi, prme==>wfo, sftbaro==>stfbarot, 
+  topot==>thetao, and rhopot==>rhopoto</li>
+  <li>The following units were changed:  for ocean meridional overturning 
+  stream function, kg<sup>3</sup> s<sup>-1</sup>  ==> m<sup>3</sup>  s<sup>-1</sup>.  
+  for ocean barotropic stream function, kg<sup>3</sup> s<sup>-1</sup>  ==> m<sup>3</sup>  s<sup>-1</sup>.  For several variables, percent ==> % (nb. CMOR will accept "percent" as an 
+  alias for "%", but the netCDF file will show "%").</li>
+  <li>A few corrections were made to the "standard_names"</li>
+  <li>The "source" column in the tables was replaced by a "notes" column 
+  providing explanatory information.  These notes should be studied 
+  carefully to ensure conformance with IPCC requirements.</li>
+  <li>Dimensionless units are now expressed simply as a numeric factor (e.g.,  
+  '1' or '1e-3') or as '%', but not as a dimensionless ratio (e.g.,  
+  'kg/kg').</li>
+  <li>Tables were constructed and detailed information was provided (for the 
+  first time) for the "Lower priority fields" (previously identified as 
+  "optional")..</li>
+  <li>The following lower priority fields were eliminated: sea surface salinity 
+  (already collected as part of the 3-d salinity field), the vertical and 
+  horizontal components of temperature and salinity fluxes as a function of 
+  longitude, latitude, model layer, and month (this was the only field requested 
+  on model levels and is difficult to treat uniformly; interpolating to depth 
+  levels would make it impossible to treat precisely and might not be any better 
+  an approximation than multiplying velocity times salinity or temperature, 
+  which is possible from fields collected as high priority), temperature on all sea 
+  ice model levels (too difficult to uniformly treat sea ice models with 
+  different vertical coordinates, and although this field would be useful for 
+  energy budget studies, other terms in the budget are not being collected), 
+  surface snow thickness (already collected as high priority field),  "tendency of sea ice thickness due to thermodynamics" 
+  (of little value without all the other terms needed to balance the sea ice 
+  equation), and certain land surface fields, including total 
+  heat storage, albedo, soil types, vegetation fraction etc (difficult to 
+  define uniformly across models).</li>
+  <li>A table with dimension information was added.</li>
+</ol>
+
+</body>
+
+</html>
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..c7f7454
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,105 @@
+INSTALLATION INSTRUCTIONS  
+------------------------- 
+Climate Model Output Rewriter (CMOR) version 2.0 installation instructions.
+
+ 
+DOWNLOAD 
+--------
+You can get the latest version of the software from the CMOR homepage
+http://www2-pcmdi.llnl.gov/cmor/
+
+
+INSTALLATION
+------------ 
+CMOR 2 requires external packages that need to be installed first. 
+It can be compiled/linked against either NetCDF3 or NetCDF4. If you
+decide to go with NetCDF4 be sure to build NetCDF4 with the
+ --enable-netcdf-4 option! 
+Also make sure to install UDUNITS version 2 and not version 1 !
+NetCDF4 wil give you access to compression/chunking capabilities.
+NOTE: CMIP5 REQUIRES NetCDF3 output files
+These packages do NOT require to be built with the Fortran interface, cmor is only
+calling their C interface.
+
+FIRST:
+ Install external dependencies: 
+  Option 1: linkeng against NetCDF3
+     - NetCDF3: available at: http://www.unidata.ucar.edu/downloads/netcdf/netcdf-3_6_3/index.jsp
+  Option 2: NetCDF4 (if you want to use compression/chunking for other projects than CMIP5)
+     - zlib (usually already present on most system), http://zlib.net
+     - HDF5: available at: http://hdf.ncsa.uiuc.edu/HDF5
+     - NetCDF4: available at: http://www.unidata.ucar.edu/software/netcdf/
+                DOT NOT FORGET to build with --enable-netcdf-4 option
+  Always:
+     - udunits2: (not 1) http://www.unidata.ucar.edu/software/udunits/udunits-2/udunits2.html
+     - libuuid: I used the version at http://www.ossp.org/pkg/lib/uuid
+
+ NOTES: it strongly recommend to use the --disable-shared argument to the 
+        ./configure when building udunits2, hdf5 and netcdf4. Otherwise make 
+        sure the path to hdf5 and netcdf4 lib directory is in your search path 
+        or in your LD_LIBRARY_PATH environment variable.
+        Also with building NetCDF4, it is very important (although extremeley 
+        counter-intuitive) to add the --enable-netcdf-4 argument, otherwise 
+        support for netcdf4 will not be enabled...
+
+ NOTES2: You only need to install the C libraries for these. Usually you can turn off
+	 the fortran using --disable-fortran
+ 
+ NOTES3: on 64bit systems make SURE both C and FORTRAN compiler are running in same 32/64 bit mode. This is especially true for users migrating their Mac OS 10.5 machines to 10.6 since gfortran does not come standard the old 32bit is usually transfered.
+
+SECOND: Install CMOR (version 2) library
+        run the configuration script, build and install
+
+        ./configure --prefix=/path/to/where/you/want/cmor --with-netcdf=/path/to/NetCDF4 --with-hdf5=/path/to/HDF5 --with-udunits2=/path/to/udunits2
+        make
+        make install
+
+   NOTE: at the configure stage there are some influential variables:
+        CC       : C comipler to use
+        CPPFLAGS : C preprocessing macros
+        CFLAGS   : C compilation flags
+        FC       : Fortran compiler to use
+        FFLAGS   : Fortan Compilation flags
+        LDFLAGS  : Linking time compilation flags
+        
+        CMOR will "Best-guess" your system and set these, but if you need 
+        specific values for your system make sure to set these environment 
+        variables first
+        
+*) installing the python version
+        /path/to/your/python/bin/python setup.py install
+        or simply
+        make python 
+        the later picks up whatever python is in your path
+
+CLEANING:
+    make clean
+    or to completely clean (i.e. remove the built lib):
+    make distclean    
+    
+UNINSTALLING
+    make uninstall
+      Note: the keyword, "uninstall", removes the library and include
+              files from the location specified by "PREFIX" at configure time.
+
+TESTING:
+    multiple tests are available
+        make test
+        make test_python
+
+LINKING ---------------------------------------------
+
+        You will need to link against libcmor.a and the netcdf4 hdf5
+
+Example of linking with a fortran comipler:
+/opt/ibmcmp/xlf/8.1/bin/xlf90 -qsuffix=f=f90   $(DEBUG)  Test/test_fortran_example_00.f90 -L/lgm/cmor2/lib -L. -lcmor  -I/lgm/NetCDF4/include  -L/lgm/NetCDF4/lib -lnetcdf  -lhdf5_hl -lhdf5 -lm -lz  -ludunits2  -o test_fortran_example_00
+
+        You can  look in the Makefile under the testipcc section for an example 
+        compilation on your system.
+
+
+MINI F.A.Q. is compilation
+
+If you get an error similar to this one:
+Error: Generic function 'cmor_write' at (1) is not an intrinsic function
+It probably means that the argument type you passed to the fortran are wrong and that the compiler canot find a matching function in the cmor_write interface 
diff --git a/Lib/__init__.py b/Lib/__init__.py
new file mode 100644
index 0000000..49c36f0
--- /dev/null
+++ b/Lib/__init__.py
@@ -0,0 +1,9 @@
+from cmor_const import *
+
+from pywrapper import axis,variable,write,setup,load_table,dataset,set_table,zfactor,close,grid,set_grid_mapping,time_varying_grid_coordinate,set_cur_dataset_attribute,get_cur_dataset_attribute,has_cur_dataset_attribute,create_output_path
+
+try:
+  from check_CMOR_compliant import checkCMOR
+except Exception,err:
+  print err
+  pass
diff --git a/Lib/check_CMOR_compliant.py b/Lib/check_CMOR_compliant.py
new file mode 100644
index 0000000..06bbcdd
--- /dev/null
+++ b/Lib/check_CMOR_compliant.py
@@ -0,0 +1,1569 @@
+import cdms2
+import os
+import unidata
+import genutil
+import numpy
+import cdtime
+import cmor
+import time
+VERBOSE=-999
+
+class CMORError(Exception):
+    def __init__(self,value=None):
+        self.value=value[0]
+    def __str__(self):
+        color=31
+        msg = "%c[%d;%d;%dm%s%c[%dm" % (0X1B,2,color,47,self.value,0X1B,0)
+        return msg
+
+def hyphenize(value):
+    out=str(value)
+    for c in [' ',"_",'(',')','.',';',',','[',']',':','/','*','?','<','>','"',"'",'{','}','&']:
+        out=out.replace(c,"-")
+    return out
+
+def drs_check_pos(i,path,fout,noerror,val,name):
+    dic = { 1:"",2:"second to ",3:"third to "}
+    posstr = dic.get(i,"%ith to " % i)
+    if path[-i]!=val:
+        return manageLog(fout, noerror, 'Error file directory does not conform to DRS structure, %slast directory should be the %s (%s vs %s)' % (posstr, name, path[-i],val))
+    return 0
+
+def addcoloring(fout,error):
+    #warning blue: 34
+    #error red: 31
+    if error == cmor.CMOR_NORMAL:
+        color=31
+    elif error == cmor.CMOR_WARNING:
+        color=34
+    else:
+        return
+    print >> fout, "%c[%d;%d;%dm" % (0X1B,2,color,47)
+    return
+
+def delcoloring(fout):
+    print >> fout,"%c[%dm" % (0X1B,0)
+    return
+    
+def manageLog(fout,error,*msg_bits):
+    """ Print error message or raise an exception depending on noerror flag)"""
+    msg=''
+    for m in msg_bits:
+        msg+=" "+str(m)
+    msg=msg.lstrip()
+        
+##     print >>fout, 'No error is:',noerror
+    if error == cmor.CMOR_CRITICAL:
+        raise CMORError,[msg,]
+    elif error == VERBOSE:
+        fout.write( msg)
+        if msg_bits[-1]!="":
+            print >> fout
+        return
+        
+    addcoloring(fout,error)
+    print >>fout, '@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%'
+    print >>fout, '@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%'
+    if error == cmor.CMOR_NORMAL:
+        print >>fout, '@#%@#%@#%@#%@#%           ERROR          %@#%@#%@#%@#%@#%@#%@#%'
+    elif error == cmor.CMOR_WARNING:
+        print >>fout, '@#%@#%@#%@#%@#%          WARNING         %@#%@#%@#%@#%@#%@#%@#%'
+    print >>fout, '@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%'
+    print >>fout, '@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%'
+    delcoloring(fout)
+    print >>fout
+    addcoloring(fout,error)
+    print >>fout, msg
+    delcoloring(fout)
+    print >>fout
+    addcoloring(fout,error)
+    print >>fout, '@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%'
+    print >>fout, '@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%@#%'
+    delcoloring(fout)
+    print >>fout
+    return 1
+
+def split_expt_ids(val):
+    long_vals=[]
+    short_vals = []
+    for v in val:
+        i = v.find("'")
+        if i>-1:
+            j=v[i+1:].find("'")
+            if j>-1:
+                long_vals.append(v[:i])
+                short_vals.append(v[j+i+2:])
+            else:
+                long_vals.append(v)
+                short_vals.append("")
+        else:
+            long_vals.append(v)
+            short_vals.append("")
+    return long_vals,short_vals
+
+def readTable(table):
+    lists_kw=['requested','bounds_requested','z_factors','z_bounds_requested','dimensions','required','ignored','optional']
+    f=open(table,'r')
+    import hashlib
+    m5=hashlib.md5(f.read())
+    m5=m5.hexdigest()
+    f.seek(0)
+    ln=f.readlines()
+    f.close()
+    header=1
+    gen_attributes={'actual_md5':m5}
+    while header:
+        l = ln.pop(0)[:-1]
+        l=l.strip()
+        if l=='' or l[0]=='!':
+            continue
+        sp=l.split('_entry')
+        if len(sp)>1:
+            ln.insert(0,l+'\n')
+            header=0
+            continue
+        sp=l.split(':')
+        kw=sp[0]
+        st="".join(sp[1:])
+        st=st.split('!')[0].strip()
+        if st[0]=="'":
+            st=st[1:-1]
+        if gen_attributes.has_key(kw):
+            if isinstance(gen_attributes[kw],str):
+                gen_attributes[kw]=[gen_attributes[kw],st]
+            else:
+                gen_attributes[kw].append(st)
+        else:
+            gen_attributes[kw]=st
+    e={} # entries dictionnary
+    while len(ln)>0:
+        l = ln.pop(0)
+        sp=l.split('_entry:')
+        entry_type=sp[0]
+        entry=sp[1].strip()
+        if not e.has_key(entry_type):
+            e[entry_type]={}
+        e[entry_type][entry]=getattr(e[entry_type],entry,{})
+##         print >>fout, e[entry_type][entry]
+        cont=1
+        while cont:
+            l = ln.pop(0)[:-1]
+            l=l.strip()
+            if l=='' or l[0]=='!':
+                if len(ln)==0:
+                    cont=0
+                continue
+            sp=l.split('_entry:')
+            if len(sp)>1:
+                ln.insert(0,l+'\n')
+                cont=0
+            sp=l.split(':')
+            kw=sp[0].strip()
+            val=":".join(sp[1:]).split('!')[0].strip()
+##             print >>fout, 'dic is:',e[entry_type][entry]
+            if e[entry_type][entry].has_key(kw):
+                if kw in lists_kw:
+                    e[entry_type][entry][kw]="".join(e[entry_type][entry][kw])
+                e[entry_type][entry][kw]+=' '+val
+            else:
+                e[entry_type][entry][kw]=val
+##             print >>fout, 'After:',e[entry_type][entry][kw]
+            if kw in lists_kw:
+##                 print >>fout, 'splitting:',kw,e[entry_type][entry][kw].split()
+                e[entry_type][entry][kw]=e[entry_type][entry][kw].split()
+            if len(ln)==0:
+                cont=0
+    e['general']=gen_attributes
+##     for type in e.keys():
+##         print >>fout, 'Type:',type
+##         for k in e[type].keys():
+##             print >>fout, '\t Entry:',k
+##             for a in e[type][k].keys():
+##                 print >>fout, '\t\t',a,':',e[type][k][a]
+    return e
+
+
+def checkCMOR(fout,file,table,noerror=cmor.CMOR_CRITICAL,variable=None,from_bounds=None,other_tables=None,dodrs=True):
+
+    req_glbl_att = ['title','Conventions','source','experiment','source','institution','project_id','table_id','realization',]
+    opt_glbl_att = ['cmor_version','history','references','comment','parent_experiment']
+
+    nerr=0
+    nwarn=0
+    ncheck=0
+    IPCC_std_vars=[]
+    IPCC_std_axes=[]
+    
+    tables=[table,]
+    if other_tables is not None:
+        for t in other_tables:
+            if not t in tables and t is not None:
+                tables.append(t)
+
+    etables = []
+    for tbl in tables:
+        manageLog(fout,VERBOSE, 'Reading table:',tbl)
+        e=readTable(tbl)
+        etables.append(e)
+        Vars=e['variable']
+        Axes=e['axis']
+        extra_req = e['general'].get('required_global_attributes','').split()
+        for ex in extra_req:
+            if not ex in req_glbl_att:
+                req_glbl_att.append(ex)
+        for v in Vars.keys():
+            IPCC_std_vars.append(Vars[v].get('out_name',v))
+        for a in Axes.keys():
+            onm = Axes[a].get('out_name',a)
+            if not onm in IPCC_std_axes:
+                IPCC_std_axes.append(onm)
+    ##         if IPCC_std_axes[-1]=='lev' :
+    ##             IPCC_std_axes.pop(-1)
+    ##             IPCC_std_axes.append('eta')
+    ##             Axes[a]['out_name']='eta'
+
+    ver = e['general'].get('cmor_version',2.0)
+    ver = '%g' % float(ver)
+    spver = ver.split('.')
+    major = int(spver[0])
+    if major>1:
+        req_glbl_att+=["contact",'experiment_id','physics_version','initialization_method','institute_id','institution','tracking_id','product','frequency','model_id','forcing','creation_date','frequency','modeling_realm']
+    else:
+        opt_glbl_att+=["contact",'experiment_id','physics_version','initialization_method','institute_id','institution','tracking_id','product','frequency','model_id','forcing','creation_date','frequency','modeling_realm']
+    if isinstance(file,str):
+        fnm=file
+        file=cdms2.open(file)
+    elif isinstance(file,cdms2.dataset.CdmsFile):
+        fnm=str(file).split('file')[1].split(',')[0].strip()[1:-1]
+    else:
+        nerr+=manageLog(fout, noerror, 'You  must pass a file name or cdms2 file object')
+
+    if fnm.split("_")[-1]=="clim.nc":
+        is_clim = True
+    else:
+        is_clim = False
+
+
+    pthroot, shrt_fnm = os.path.split(fnm)
+    if variable is None:
+        manageLog(fout,VERBOSE, 'Checking file argument',IPCC_std_axes)
+        manageLog(fout,VERBOSE, 'Checking path structure for path:',pthroot)
+        manageLog(fout,VERBOSE, 'Checking file structure for file:',fnm)
+        print >> fout, 'Checking the file starts with variable name'
+        ok = False
+        for v in IPCC_std_vars:
+            n = len(v)
+            if shrt_fnm[:n] == v and shrt_fnm[n]=='_':
+                ok = True
+                break
+        if not ok:
+            nerr+=manageLog(fout, noerror, ''+shrt_fnm+' does not start with standard %s variable name followed by _' % file.project_id)
+        vf=v
+        #Check the variable is actually in the file
+        if not v in file.variables.keys():
+            nerr+=manageLog(fout,noerror,"Your file name says it contains variable",v,"but it is not in your file, your file contains:",file.variables.keys())
+        if hasattr(file,'cmor_version'):
+            up = False
+            rew = False
+            ver = getattr(file,'cmor_version')
+            if isinstance(ver,numpy.ndarray): ver = '%g' % float(ver[0])
+            spver = ver.split('.')
+            fmajor = int(spver[0])
+            if len(spver)>1 :
+                minor = int(spver[1])
+                if len(spver)>2:
+                    patch = int(spver[2])
+                else:
+                    patch = 0
+            else:
+                minor=0
+                patch=0
+            if fmajor>cmor.CMOR_VERSION_MAJOR:
+                up = True
+            elif fmajor<cmor.CMOR_VERSION_MAJOR:
+                rew=True
+            else: # Major matches
+                if minor>cmor.CMOR_VERSION_MINOR:
+                    up = True
+                elif minor<cmor.CMOR_VERSION_MINOR:
+                    rew = True
+                else: # minor matches
+                    if patch>cmor.CMOR_VERSION_PATCH:
+                        up = True
+                    elif patch<cmor.CMOR_VERSION_PATCH:
+                        rew = True
+
+            ncheck+=1
+            if up:
+                if fmajor==cmor.CMOR_VERSION_MAJOR:
+                    nwarn+=manageLog(fout,cmor.CMOR_WARNING,"You are using cmor version: %i.%i.%i, these files have been written with version: %i.%i.%i, you should upgrade your cmor" % (cmor.CMOR_VERSION_MAJOR,cmor.CMOR_VERSION_MINOR,cmor.CMOR_VERSION_PATCH,fmajor,minor,patch))
+                else:
+                    nerr+=manageLog(fout,noerror,"You are using cmor version: %i.%i.%i, these files have been written with version: %i.%i.%i, you need to upgrade cmor to check these files" % (cmor.CMOR_VERSION_MAJOR,cmor.CMOR_VERSION_MINOR,cmor.CMOR_VERSION_PATCH,fmajor,minor,patch))
+
+            ncheck+=1
+            if rew:
+                nwarn+=manageLog(fout,cmor.CMOR_WARNING,"You are using cmor version: %i.%i.%i, these files have been written with version: %i.%i.%i, you should consider rewriting these files" % (cmor.CMOR_VERSION_MAJOR,cmor.CMOR_VERSION_MINOR,cmor.CMOR_VERSION_PATCH,fmajor,minor,patch))
+                
+        ## 32bit systems only
+        if os.uname()[-1].find("64")==-1:
+            sz=os.path.getsize(fnm)
+            manageLog(fout,VERBOSE, 'Checking file size (32bit systems only):',sz)
+            if sz>2**31:
+                if major>1:
+                    ncheck+=1
+                    nwarn+=1
+                    ec =cmor.CMOR_WARNING
+                else:
+                    ec=noerror
+                manageLog(fout,ec, 'File size too large',sz,' (>2Gb)!')
+                #nerr+=manageLog(fout, noerror, 'file size too large (>2Gb)!')
+
+        manageLog(fout,VERBOSE, 'Checking that file contains required global attributes')
+        for att in req_glbl_att:
+            val=e['general'].get('expt_id_ok',None)
+            long_vals,shrt_vals = split_expt_ids(val)
+            if not hasattr(file,att) and not att in shrt_vals:
+                i = req_glbl_att.index(att)
+                if i==0 or req_glbl_att[i-1] not in shrt_vals:
+                    nerr+=manageLog(fout, noerror, 'File must have global attribute: '+att)
+                else:
+                    pr = req_gbl_att[i-1]
+                    expt = getattr(file,"experiment","")
+                    shrt = shrt_vals[long_vals.index(expt)]
+                    if shrt == pr:
+                        nerr+=manageLog(fout, noerror, 'File must have global attribute: '+att) 
+            fval=getattr(file,att,'')
+            if att=='experiment_id':
+                ok = False
+                for e in etables:
+                    val=e['general'].get('expt_id_ok',None)
+                    long_vals,shrt_vals = split_expt_ids(val)
+                    for lv in shrt_vals:
+                        if fval==lv or (lv[-4:] =='XXXX' and fval[:-4]==lv[:-4]) or (lv[-4:] =='DDHH' and fval[:-10]==lv[:-10]):
+                            ok = True
+                            break
+                if not ok: 
+                    nerr+=manageLog(fout, noerror, 'experiment_id file attribute must be one of : %s, you have: %s' % (str(shrt_vals), fval) )
+            elif att=='experiment':
+                ok = False
+                for e in etables:
+                    val=e['general'].get('expt_id_ok',None)
+                    long_vals,shrt_vals = split_expt_ids(val)
+                    for lv in long_vals:
+                        if fval==lv or (lv[-4:] =='XXXX' and fval[:-4]==lv[:-4]) or (lv[-4:] =='DDHH' and fval[:-10]==lv[:-10]):
+                            ok = True
+                            break
+                if not ok: 
+                    nerr+=manageLog(fout, noerror, 'experiment file attribute must be one of : %s, you have: %s' % (str(long_vals), fval) )
+            elif att=='parent_experiment_id':
+                if fval == getattr(file,"experiment_id",""):
+                    nerr+=manageLog(fout,noerror,"parent_experiment_id and experiment_id cannot be the same you have %s for both" % fval)
+                ok = False
+                for e in etables:
+                    val=e['general'].get('expt_id_ok',None)
+                    long_vals,shrt_vals = split_expt_ids(val)
+                    shrt_vals.append("N/A")
+                    for lv in shrt_vals:
+                        if fval==lv or (lv[-4:] =='XXXX' and fval[:-4]==lv[:-4]) or (lv[-4:] =='DDHH' and fval[:-10]==lv[:-10]):
+                            ok = True
+                            break
+                if not ok: 
+                    nerr+=manageLog(fout, noerror, 'parent_experiment_id file attribute must be one of : %s, you have: %s' % (str(shrt_vals), fval) )
+            elif att == 'forcing':
+                sp = fval.split(',')
+                forcings=e['general'].get("forcings")
+                for vl in sp:
+                    if not vl.strip() in forcings:
+                        nerr+=manageLog(fout,noerror,"file attribute forcing must be a comma separated list with values in: %s, yours is: %s (offending value: %s)" % (forcings,fval,vl.strip()))
+            elif att == 'frequency':
+                if not fval in ['yr','mon','day','6hr','3hr','subhr','fx','monClim']:
+                    nerr+=manageLog(fout,noerror, 'frequency must be one of:','yr','mon','day','6hr','3hr','subhr','fx','monClim')
+            elif att in ['realization']:
+                if isinstance(fval,numpy.ndarray):
+                    if len(fval)>1:
+                        nerr+=manageLog(fout, noerror, 'realization attribute must be an integer')
+                    fval=fval[0]
+                if not isinstance(fval,(int,numpy.int,numpy.int32)):
+                    nerr+=manageLog(fout, noerror, 'realization attribute must be an integer')
+            elif att in ['table_id']:
+                manageLog(fout,VERBOSE, '\ttable_id is: ', fval)
+            elif att == "creation_date":
+                # checks that it matches: YYYY-MM-DDTHH:MM:SSZ
+                fmt = "%Y-%m-%dT%H:%M:%SZ"
+                try:
+                    t =time.strptime(fval,fmt)
+                except:
+                    nerr+=manageLog(fout, noerror, 'Creation Date must be in format: %s yours is: %s' % (fmt,fval))
+            elif att == "branch_time":
+                try:
+                    myval=float(fval)
+                except:
+                    nerr+=manageLog(fout, noerror, 'branch_time must be convertible to float, you have %s' % (fval))
+                if getattr(file,"parent_experiment_id","").strip()=="N/A":
+                    if float(fval)!=0.:
+                        nerr+=manageLog(fout, noerror, 'if global attribute parent_experiment_id is N/A then branch_time must be 0., you have %s' % (fval))
+
+                
+            elif att == "project_id":
+                if e['general'].get("project_id") != fval:
+                    nerr+=manageLog(fout, noerror, 'project_id must be %s' % (e['general'].get("project_id")))
+            else:
+                val=e['general'].get(att,None)
+                if isinstance(fval,str) : fval=fval.strip().lower()
+                if isinstance(val,str) : val=val.strip().lower()
+                if val is not None:
+                    if isinstance(fval,str):
+                        res=fval.find(val)
+                        if res==-1:
+                            res=False
+                        else:
+                            res=True
+                    else:
+                        res=fval==val
+                        manageLog(fout,VERBOSE, '**************',att,val,fval)
+                    if not res:
+                        nerr+=manageLog(fout, noerror, 'attribute '+att+' must be set to: -'+val+'- +'+fval+'+ '+str(res))
+
+
+        for att in opt_glbl_att:
+            ncheck+=1
+            if not hasattr(file,att):
+                nwarn+=1
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tIt is often helpful to define the global attribute: ',att)
+
+        for att in file.attributes.keys():
+            ncheck+=1
+            if not att in req_glbl_att and not att in opt_glbl_att:
+                nwarn+=1
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tYou have global attribute: %s which is neither required nor optional ' % att)
+
+
+        if major>=2: # more file structure there
+            tbl_id = getattr(file,'table_id').split()[1]
+            tbl_date= getattr(file,'table_id').split('(')[1].split(')')[0].strip()
+            ttbl_id = e['general'].get("table_id").split()[1]
+            ttbl_date = e['general'].get("table_date").strip()
+
+            if tbl_date!=ttbl_date:
+                nwarn+=1
+                ncheck+=1
+                manageLog(fout,cmor.CMOR_WARNING,"File says table date was %s, but your table is dated from: %s" %( tbl_date,ttbl_date))
+
+            if tbl_id!=ttbl_id:
+                nerr+=manageLog(fout, noerror, 'your file indicates a table id of %s while your table id is %s' % (tbl_id,ttbl_id))
+
+            sp = shrt_fnm.split(v)[1].split("_")
+            t = file[v].getTime()
+            if t is not None:
+                n=6
+                t=t.clone()
+            else:
+                n=4
+            if is_clim:
+                n+=1
+            expt = getattr(file,"experiment","")
+            try:
+                shrt = shrt_vals[long_vals.index(expt)]
+            except:
+                #Ok we must be in one of the XXXX or DDHH cases...
+                for i in range(len(long_vals)):
+                    if long_vals[i][:-4]==expt[:-4]:
+                        shrt=shrt_vals[i][:-4]+expt[-4:]
+                        break
+                    if long_vals[i][:-10]==expt[:-10]:
+                        shrt=shrt_vals[i][:-10]+expt[-10:]
+                        break
+
+            if shrt=="":
+                n-=1
+                spoffset=-1
+            else:
+                spoffset=0
+                
+            print len(sp)
+            if len(sp)<n:
+                nerr+=manageLog(fout, noerror, 'your file name does not seem to match the profile: varid_tableid_modelid_exptid_rid[iid][pid][_startdate-enddate][_suffix][_clim].nc')
+                
+            if sp[1]!=tbl_id:
+                nerr+=manageLog(fout, noerror, 'your file name indicates a table id of %s while your table id should be %s' % (sp[1],tbl_id))
+
+            if sp[2]!=getattr(file,'model_id'):
+                fmodid = hyphenize(getattr(file,'model_id'))
+                if sp[2]!=fmodid:
+                    nerr+=manageLog(fout, noerror, 'your file name indicates model_id is: %s but your file says it is: %s' % (sp[2],getattr(file,'model_id')))
+            if shrt!="":
+                if shrt!=sp[3]:
+                    nerr+=manageLog(fout, noerror, 'your file name indicates exp_id is: %s but your file says it should be: %s' % (sp[3],shrt))
+
+            real = sp[4+spoffset]
+            rsp=real.split("p")
+            if hasattr(file,"physics_version"):
+                if len(rsp)==1:
+                    nerr+=manageLog(fout, noerror, 'your file name does not indicate physics_version but your file says it should be: %s' % (file.physics_version))
+                elif int(rsp[0].split('i')[0][1:])!=int(file.physics_version):
+                    nerr+=manageLog(fout, noerror, 'your file name indicates physics_version is: %s but your file says it should be: %s' % (rsp[1],file.physics_version))
+            elif len(rsp)!=1:
+                    nerr+=manageLog(fout, noerror, 'your file name indicates physics_version to be %s but your file says it has not physics: %s' % (rsp[1]))
+
+            real=rsp[0]
+            rsp=real.split("i")
+            if hasattr(file,"initialization_method"):
+                if len(rsp)==1:
+                    nerr+=manageLog(fout, noerror, 'your file name does not indicate initialization_method but your file says it should be: %s' % (file.initialization_method))
+                elif int(rsp[1])!=int(file.initialization_method):
+                    nerr+=manageLog(fout, noerror, 'your file name indicates initialization_method is: %s but your file says it should be: %s' % (rsp[1],file.initialization_method))
+            elif len(rsp)!=1:
+                    nerr+=manageLog(fout, noerror, 'your file name indicates initialization_method to be %s but your file says it has not initialization_method: %s' % (rsp[1]))
+            real=rsp[0]
+                
+            if int(real[1:])!=int(getattr(file,'realization')):
+                nerr+=manageLog(fout, noerror, 'your file name indicates realization is: %s but your file says it is: %i' % (sp[3][3:],int(getattr(file,'realization'))))
+            ## skip the following if it has no time
+            if t is not None:
+                # here we check the clim b4 going further checking into date
+                clim_att = getattr(t,'climatology',None)
+                if clim_att is None:
+                    has_clim = False
+                else:
+                    has_clim = True
+                if is_clim!=has_clim:
+                    if is_clim:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates climatology, but the time axis does not have the climatology attribute')
+                    else:
+                        nerr+=manageLog(fout, noerror, 'your file name does not indicates climatology (_clim.nc), but the time axis has the climatology attribute')
+
+
+                if is_clim:
+                    tmp = file(t.climatology,slice(0,1))
+                    ft0 = tmp[0][0]
+                    tmp = file(t.climatology,slice(-1,None))
+                    ft1 = tmp[-1][1]
+                else:
+                    ft0=t[0]
+                    ft1=t[-1]
+                ft0= cdtime.reltime(ft0,t.units).tocomp(t.getCalendar())
+                ft1= cdtime.reltime(ft1,t.units).tocomp(t.getCalendar())
+
+                dates = sp[5+spoffset].split("-")
+
+                # now determines the frequency
+                units = t.units.split("since")[0].strip()
+                interval = float(e['general'].get("approx_interval"))
+                interval = genutil.udunits(interval,units).to("s").value
+
+
+                # determine what the frequency drname should be
+                if (interval<2500.) :
+                    frequency = "subhr"
+                elif (interval<15000.):
+                    frequency = "3hr"
+                elif (interval<30000.):
+                    frequency = "6hr"
+                elif (interval<100000.):
+                    frequency = "day"
+                elif (interval<3.E6):
+                    frequency = "mon"
+                else:
+                    frequency  = "yr"
+      
+                if (interval == 0.):
+                    strcpy(tmp,"fx")
+
+                #Now checks the frequecny attribute matches the one we just decided
+                if file.frequency[-4:]=='Clim':
+                    frequency=frequency+"Clim"
+                if file.frequency!=frequency:
+                    nerr+=manageLog(fout, noerror, 'your file indicates a frequency of "%s" but the approximate_interval suggests it should be: "%s"' % (file.frequency,frequency))
+
+
+                try:
+                    yr0=int(dates[0][:4])
+                except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the years section start date iun your file',dates[0][:4])
+
+                frequency = 'yr'
+                if interval<29.E6:
+                    frequency='mon'
+                    if len(dates[0])<6:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years only when the approximate interval says it should have months')
+                    try:
+                        m0 = int(dates[0][4:6])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the months section start date iun your file',dates[0][4:6])
+                else:
+                    m0=ft0.month
+
+                if interval < 2E6:
+                    frequency='mon'
+                    if len(dates[0])<8:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years and months only when the approximate interval says it should have days')
+                    try:
+                        d0 = int(dates[0][6:8])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the day section start date iun your file',dates[0][6:8])
+
+                else:
+                    d0=ft0.day
+
+                if interval < 86000:
+                    
+                    if len(dates[0])<10:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years, months and days only when the approximate interval says it should have hours')
+                    try:
+                        h0 = int(dates[0][8:10])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the hours section start date iun your file',dates[0][8:10])
+                else:
+                    h0= ft0.hour
+
+                if interval < 3000:
+                    if len(dates[0])<12:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years, months, days and hours only when the approximate interval says it should have minutes')
+                    try:
+                        mn0 = int(dates[0][10:12])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the miuntes section start date iun your file',dates[0][10:12])
+
+                else:
+                    mn0=ft0.minute
+                if interval < 50:
+                    if len(dates[0])<14:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years, months, days, hours and minutes only when the approximate interval says it should have seconds')
+                    try:
+                        s0 = int(dates[0][12:14])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the seconds section start date iun your file',dates[0][12:14])
+
+                else:
+                    s0=ft0.second
+                t0 = cdtime.comptime(yr0,m0,d0,h0,mn0,s0)
+                try:
+                    yr1=int(dates[1][:4])
+                except:
+                    nerr+=manageLog(fout, noerror, 'could not convert the years section end date iun your file',dates[1][:4])
+
+                if interval<29.E6:
+                    if len(dates[1])<6:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years only when the approximate interval says it should have months')
+                    try:
+                        m1 = int(dates[1][4:6])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the months section end date iun your file',dates[1][4:6])
+
+                else:
+                    m1=ft1.month
+
+                if interval < 2.E6:
+                    if len(dates[1])<8:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years and months only when the approximate interval says it should have days')
+                    try:
+                        d1 = int(dates[1][6:8])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the days section end date iun your file',dates[1][6:8])
+                else:
+                    d1=ft1.day
+
+                if interval < 90000:
+                    if len(dates[1])<10:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years, months and days only when the approximate interval says it should have hours')
+                    try:
+                        h1 = int(dates[1][8:10])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the hours section end date iun your file',dates[1][8:10])
+
+                else:
+                    h1=ft1.hour
+                if interval < 4000:
+                    if len(dates[1])<12:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years, months, days and hours only when the approximate interval says it should have minutes')
+                    try:
+                        mn1 = int(dates[1][10:12])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the minutes section end date iun your file',dates[1][10:12])
+
+                else:
+                    mn1=ft1.minute
+                if interval < 100:
+                    if len(dates[1])<14:
+                        nerr+=manageLog(fout, noerror, 'your file name indicates a start time with years, months, days, hours and minutes only when the approximate interval says it should have seconds')
+                    try:
+                        s1 = int(dates[1][12:14])
+                    except:
+                        nerr+=manageLog(fout, noerror, 'could not convert the seconds section end date iun your file',dates[1][12:14])
+
+                else:
+                    s1=ft1.second
+                t1 = cdtime.comptime(yr1,m1,d1,h1,mn1,s1)
+
+
+                if (ft0.year!=t0.year) or (ft0.month!=t0.month) or (ft0.day!=t0.day):
+                    nerr+=manageLog(fout, noerror, 'your file name indicates a start time of %i-%i-%i but the actual value in the file says: %i-%i-%i' % (t0.year,t0.month,t0.day,ft0.year,ft0.month,ft0.day))
+                if (ft1.year!=t1.year) or (ft1.month!=t1.month) or (ft1.day!=t1.day):
+                    nerr+=manageLog(fout, noerror, 'your file name indicates an end time of %i-%i-%i but the actual value in the file says: %i-%i-%i' % (t1.year,t1.month,t1.day,ft1.year,ft1.month,ft1.day))
+
+
+        
+            
+        manageLog(fout,VERBOSE, 'Checking that file contains only 1 variable')
+        vars=file.listvariable()
+        ## removes dims and other complementary vars
+        # First bounds
+    ##     manageLog(fout,VERBOSE, vars)
+        vars2=file.listvariable()
+        vars3=[]
+        vars4=[]
+        for v in vars2:
+    ##         manageLog(fout,VERBOSE, v)
+            V=file[v]
+            b=getattr(V,'bounds',None)
+            if b is not None:
+                vars.pop(vars.index(b))
+            b=getattr(V,'ancillary_variables',None)
+            if b is not None:
+                for sp in b.split():
+                    if sp.trip() in vars:
+                        vars.pop(sp.strip())
+            for ax in V.getAxisList():
+                b=getattr(ax,'bounds',None)
+                if b is not None:
+                    if b in vars:
+                        vars.pop(vars.index(b))
+                    Ab=file[b] # recovers associated bounds with axis
+                    f=getattr(Ab,'formula_terms',None)
+                    if f is not None:
+                        ## figures out the names of formula_terms
+                        sp=f.split(':')
+    ##                     manageLog(fout,VERBOSE, sp)
+                        for t in sp:
+    ##                         manageLog(fout,VERBOSE, 't is:',t)
+                            t=t.split()[-1]
+    ##                         manageLog(fout,VERBOSE, 'Now it is:',t)
+                            sp2=f.split(t+':')[1].split()[0]
+                            if sp2 in vars:
+                                vars3.append(vars.pop(vars.index(sp2)))
+                                vars4.append(True)
+                f=getattr(ax,'formula_terms',None)
+                if f is not None:
+                    ## figures out the names of formula_terms
+                    sp=f.split(':')
+    ##                 manageLog(fout,VERBOSE, sp)
+                    for t in sp:
+    ##                     manageLog(fout,VERBOSE, 't is:',t)
+                        t=t.split()[-1]
+    ##                     manageLog(fout,VERBOSE, 'Now it is:',t)
+                        sp2=f.split(t+':')[1].split()[0]
+                        if sp2 in vars:
+                            vars3.append(vars.pop(vars.index(sp2)))
+                            vars4.append(False)
+
+
+            coords=getattr(V,'coordinates',None)
+            if coords is not None:
+                coords = coords.split()
+                for c in coords:
+                    if c in vars:
+                        vars.pop(vars.index(c))
+            if hasattr(V,"grid_mapping"):
+                if V.grid_mapping in vars:
+                    vars.pop(vars.index(V.grid_mapping))
+                manageLog(fout,VERBOSE, "Grid_mapping attribute found, we cannot check these files yet")
+                ncheck+=1
+                nwarn+=1
+                return nwarn,ncheck,nerr
+
+
+            t = V.getTime()
+            if t is not None and hasattr(t,"climatology"):
+                c = t.climatology
+                if c in vars:
+                    vars.pop(vars.index(c))
+
+        if len(vars)!=1:
+            nerr+=manageLog(fout, noerror, 'file must contain only 1 variable, you have: '+str(len(vars))+':'+str(vars))
+
+        var=vars[0]
+        if major>=2 and dodrs:
+            #Now checks for the DRS file structure
+            prj_id = file.project_id.strip().replace(" ","_")
+            prod = file.product
+            inst = file.institute_id
+            if inst == 'not specified' :
+                inst = "INSTITUTE_ID"
+            mod = file.model_id
+            exp = file.experiment_id
+            #by pass no sht for now...
+            noff=0
+                
+            fq = file.frequency
+            realm = file.modeling_realm
+            r = str(int(file.realization))
+            if hasattr(file,"initialization_method"):
+                r+="i"+str(int(file.initialization_method))
+            if hasattr(file,"physics_version"):
+                r+="p"+str(int(file.physics_version))
+            path = os.path.dirname(fnm).split("/")
+            nerr += drs_check_pos(1,path,fout,noerror,'r%s' % r, 'realization')
+            nerr += drs_check_pos(2,path,fout,noerror,var, 'variable')
+            nerr += drs_check_pos(3,path,fout,noerror,realm, 'modeling realm')
+            nerr += drs_check_pos(4,path,fout,noerror,fq, 'frequency')
+            if exp == file.experiment:
+                noff=1
+            else:
+                nerr += drs_check_pos(5,path,fout,noerror,exp, 'experiment id')
+            nerr += drs_check_pos(6-noff,path,fout,noerror,hyphenize(mod), 'model id')
+            nerr += drs_check_pos(7-noff,path,fout,noerror,inst, 'insitution id')
+            nerr += drs_check_pos(8-noff,path,fout,noerror,prod, 'product')
+            nerr += drs_check_pos(9-noff,path,fout,noerror,prj_id, 'project id')
+                            
+    fb=False
+    if variable is not None:
+        var=variable
+        fb=from_bounds
+        manageLog(fout,VERBOSE, 'Ok user asked to check the following variable:',variable,'with from bounds =',fb)
+    manageLog(fout,VERBOSE, 'Checking variable name is %s compliant' % file.project_id)
+    if not var in IPCC_std_vars:
+        if var in Vars.keys():
+            nerr+=manageLog(fout, noerror, var+' is not valid, did you mean :'+Vars[var]['out_name']+' ?')
+        else:
+            nerr+=manageLog(fout, noerror, 'Variable name :'+var+' is not %s compliant' % file.project_id)
+    if variable is None:
+        manageLog(fout,VERBOSE, 'Checking that variable name in file matches file indications')
+        if not var == vf:
+            nerr+=manageLog(fout, noerror, 'File indicates it stores variable:'+vf+' but actually '+var+' is stored in it')
+    
+    V=file[var]
+
+    axes=V.getAxisList()
+    hasLat=0
+    hasLon=0
+    hasTime=0
+    hasLevel=0
+
+    ax_dict_name=[]
+    for ax in axes:
+        manageLog(fout,VERBOSE, 'Checking axis name is valid for:',ax.id,'on var:',V.id)
+        if not ax.id in IPCC_std_axes:
+            if ax.id in Axes.keys():
+                if major <2:
+                    ncheck+=1
+                    nwarn+=1
+                    nerr+=manageLog(fout,cmor.CMOR_WARNING, '\t\t'+ax.id+' is not preferred. We suggest you rename it:'+Axes[ax.id]['out_name'])
+                else:
+                    manageLog(fout,noerror, '\t\tAxis name '+ax.id+' is not valid. We require you rename it:'+Axes[ax.id]['out_name'])
+            elif (fb == False) or (fb == True and V.rank()!=2):
+                nerr+=manageLog(fout, noerror, 'axis id: '+ax.id+' is not a valid IPCC name')
+        if ax.isLatitude():
+            hasLat=1
+        if ax.isLongitude():
+            hasLon=1
+        if ax.isTime():
+            hasTime=1
+        if ax.isLevel():
+            hasLevel=1
+
+    old_ordering=0
+    o=V.getOrder(ids=1)
+    if old_ordering:
+        manageLog(fout,VERBOSE, 'Checking dimensions order')
+        if hasTime:
+            manageLog(fout,VERBOSE, '\tChecking time position')
+            if o[0]=='t':
+                o=o[1:]
+            else:
+                nerr+=manageLog(fout, noerror, 'time must be first dimension your ordering is:'+o)
+
+        manageLog(fout,VERBOSE, '\tChecking none tzxy dims position')
+        sp=o.split('(')
+        if len(sp)>1:
+            if o[0]!='(':
+                nerr+=manageLog(fout, noerror, 'none zyx dimensions must come right after time dimension, you have:'+o)
+            o=o.split(')')[-1]
+        manageLog(fout,VERBOSE, '\tChecking level position')
+        if hasLevel:
+            if o[0]=='z':
+                o=o[1:]
+            else:
+                nerr+=manageLog(fout, noerror, 'level must be ordered after time your order is:'+o)
+        manageLog(fout,VERBOSE, '\tChecking latitude position')
+        if hasLat:
+            if o[0]=='y':
+                o=o[1:]
+            else:
+                nerr+=manageLog(fout, noerror, 'latitude must be ordered after time and level your order is:'+o)
+        manageLog(fout,VERBOSE, '\tChecking longitude position')
+        if hasLon:
+            if o[0]=='x':
+                o=o[1:]
+            else:
+                nerr+=manageLog(fout, noerror, 'longitude must be ordered after time, level and latitude your order is:'+o)
+        
+    g=None
+    if hasLat and hasLon:
+        manageLog(fout,VERBOSE, 'Checking grid')
+        g=V.getGrid()
+        if not isinstance(g,cdms2.grid.AbstractRectGrid):
+            nerr+=manageLog(fout, noerror, 'lat/lon variable ('+var+') must have Rectilinear grids')
+
+    axes_nmes=Vars[var].get('dimensions',None)
+
+    if axes_nmes is not None:
+        manageLog(fout,VERBOSE, 'Checking rest of things on axes')
+        axes_nmes=axes_nmes[::-1]
+        axes_nmes_for_ordering=Vars[var]['dimensions'][::-1]
+        coord=getattr(V,'coordinates',None)
+        for nm in axes_nmes:
+            req_Att=['standard_name','units']
+            anm = nm
+            if nm in [ 'alevel','olevel','zlevel']:
+                gnm=nm
+                manageLog(fout,VERBOSE, '\tChecking special case %s, i.e' % (nm),'')
+                tmpax=V.getLevel()
+                print>>fout,  tmpax.id,tmpax.standard_name
+                for x in Axes.keys():
+                    tmp=Axes[x].get('standard_name',None)
+                    if tmp is not None: tmp=tmp.strip()
+                    if tmp is not None and tmp==tmpax.standard_name:
+                        nm=x
+                        Nm=Axes[x]['out_name']
+                        anm=x
+                        req_Att.append('formula')
+                        req_Att.append('formula_terms')
+                        if getattr(tmpax,"formula","")==Axes[x]['formula']:
+                            break
+                axes_nmes_for_ordering[axes_nmes_for_ordering.index(gnm)]=nm
+            elif not nm in V.getAxisIds():
+                try:
+                    Nm=Axes[nm]['out_name']
+                except:
+                    nerr+=manageLog(fout, noerror, 'with axis: '+nm+' not found for variable: '+var, noerror)
+            else:
+                Nm=nm
+            if major>1:
+                if Axes[anm].get("must_have_bounds","no")=="yes":
+                    req_Att.append("bounds")
+                if Axes[anm].get("axis",None) is not None:
+                    req_Att.append("axis")
+            else:
+                req_Att.append("bounds")
+
+            if nm == 'time' and is_clim:
+                req_Att.pop(req_Att.index("bounds"))
+                
+            manageLog(fout,VERBOSE, '\tChecking',Nm)
+            axindx=V.getAxisIndex(Nm)
+            val=Axes[nm].get('value',None)
+            if val is not None: #singleton dimension ?
+                manageLog(fout,VERBOSE, '\t\tSingleton dimension')
+                if val is None:
+                    nerr+=manageLog(fout, noerror, 'cannot retrieve needed axis:'+Nm)
+                else:
+                    val=float(val)
+                    if axindx!=-1:
+                        nerr+=manageLog(fout, noerror, 'singleton dimension '+Nm+' must be defined via coordinates attributes on variable '+var+' not as an axis')
+                    else:
+                        manageLog(fout,VERBOSE, '\t\tChecking coordinates attribute exists on '+var)
+                        aval=getattr(V,'coordinates',None)
+                        if aval is None:
+                            nerr+=manageLog(fout, noerror, 'singleton dimension must be defined via coordinates attribute')
+                        manageLog(fout,VERBOSE, '\t\tChecking coordinates attribute matches for '+var)
+                        if not Nm in aval.split():
+                            nerr+=manageLog(fout, noerror, 'coordinates atrtribute on '+var+' should be '+Nm+' it is '+aval)
+
+                        ax=file[Nm]
+                        mn,mx=Axes[nm].get('valid_min',None), Axes[nm].get('valid_max',None)
+                        manageLog(fout,VERBOSE, '\t\tChecks for value')
+                        if ax != val:
+                            manageLog(fout,VERBOSE, '\t\t\tNot matching, checking if valid range is defined in table')
+                            if mn is None and mx is None:
+                                nerr+=manageLog(fout, noerror, 'singleton dimension value for '+Nm+' must be '+str(val))
+                            manageLog(fout,VERBOSE, '\t\t\tChecking if value is within range defined in table')
+                            if mn is not None:
+                                if mx is not None:
+                                    if not( float(mn)<ax<float(mx)):
+                                        nerr+=manageLog(fout, noerror, 'invalid value for singleton dimension '+Nm+': '+str(ax)+' must be between '+mn+' and '+mx)
+                                elif ax<float(mn):
+                                    nerr+=manageLog(fout, noerror, 'invalid min for singleton dimension '+Nm+': '+str(ax)+' must be greater than '+mn)
+                            elif ax>float(mx):
+                                    nerr+=manageLog(fout, noerror, 'invalid max for singleton dimension '+Nm+': '+str(ax)+' must be less than '+mx)
+                        manageLog(fout,VERBOSE, '\t\tChecking for bounds information')
+                        b=getattr(ax,'bounds',None)
+                        bv=Axes[nm].get('bounds_values',None)
+                        if bv is not None:
+                            manageLog(fout,VERBOSE, '\t\t\tBounds information defined in table, checking vs file')
+                            bv=bv.split()
+                            bv=float(bv[0]),float(bv[1])
+                            if b is not None:
+                                manageLog(fout,VERBOSE, '\t\t\tBounds information defined in file, checking if matches')
+                                abv=file[b]
+                                ncheck+=1
+                                if abv[0]!=bv[0] or abv[1]!=bv[1]:
+                                    nwarn+=1
+                                    manageLog(fout,cmor.CMOR_WARNING, '\t\t\t\tbounds_value for singleton dimension '+Nm+': '+str(abv)+' do not match requested bounds:'+str(bv))
+                            else:
+                                nerr+=manageLog(fout, noerror, 'singleton dimension: '+Nm+' bounds required')
+                        else:
+                            ncheck+=1
+                            if b is not None:
+                                nwarn+=1
+                                manageLog(fout,cmor.CMOR_WARNING, '\t\t\t\tSingleton dimension: '+Nm+' bounds should not be included')
+
+                axes_nmes_for_ordering.pop(0)
+                continue # singleton dimension checked no need to continue further
+
+            if axindx==-1:
+                nerr+=manageLog(fout, noerror, 'Variable '+var+' should have an axis called '+Axes[Nm])
+            ax=V.getAxis(axindx)
+            manageLog(fout,VERBOSE, '\t\tChecking that dimension order is positioned:',axes_nmes_for_ordering.index(nm)+1,axes_nmes)
+            if axindx!=axes_nmes_for_ordering.index(nm):
+                nerr+=manageLog(fout, noerror, 'in ordering for dimension '+nm+' position is: '+str(axindx)+' but it should be: '+str(axes_nmes_for_ordering.index(nm)))
+            if ('cell_bounds' in Axes[nm].get('ignored',[])) or ('cell_bounds' in Axes[nm].get('forbidden',[])) or ('cell_bounds' in Axes[nm].get('optional',[])):
+                req_Att.pop(req_Att.index('bounds'))
+            if 'units' in Axes[nm].get('ignored',[]) or 'units' in Axes[nm].get('optional',[]):
+                try:
+                    req_Att.pop(req_Att.index('units'))
+                except:
+                    pass
+            ## Ok here we're trying to do the region thing, i.e coordinate attribute exist
+            docoord=False
+            if coord is not None:
+                for c in coord.split():
+                    nax=file[c]
+                    if ax.id in nax.getAxisIds():
+                        oldax=ax
+                        ax=nax
+                        docoord=True
+            manageLog(fout,VERBOSE, '\t\tChecking if required attributes are set:','')
+            for r in req_Att:
+                manageLog(fout,VERBOSE, r,'')
+                val=getattr(ax,r,None)
+                if val is None:
+                    print >>fout
+                    nerr+=manageLog(fout, noerror, 'attribute '+r+' is required for axis '+ax.id)
+                if r!='units':
+                    good_val=Axes[nm].get(r,None)
+                    if good_val is not None:
+                        if val!=good_val:
+                            nerr+=manageLog(fout, noerror, 'axis attribute '+r+' should be: '+str(good_val)+' but is:'+str(val))
+                if r=='formula_terms':
+                    print 'Formula:',Axes[anm]['formula'],val
+            print >>fout
+            if not 'units' in Axes[nm].get('ignored',[]):
+                if not 'units' in Axes[nm].get('optional',[]) or ('units' in Axes[nm].get('optional',[]) and hasattr(ax,'units')):
+                    if not ax.isTime():
+                        manageLog(fout,VERBOSE, '\t\tChecking units',ax.units)
+                        if major<2:
+                            u1=genutil.udunits(1,ax.units)
+                            try:
+                                u2=u1.to(Axes[nm]['units'])
+                                if u2.value!=1:
+                                    nerr+=manageLog(fout, noerror, 'units:'+ax.units+' are not compatible with required:'+Axes[nm]['units'])
+                            except:
+                                nerr+=manageLog(fout, noerror, 'units:'+ax.units+' are not compatible with required:'+Axes[nm]['units'])
+                        else:
+                            if ax.units != Axes[nm]['units']:
+                                nerr+=manageLog(fout, noerror, 'units: '+ax.units+' are not the required units:'+Axes[nm]['units'])
+
+                    else:
+                        manageLog(fout,VERBOSE, '\t\tChecking units',ax.units)
+                        if major>1:
+                            if ax.units.lower().find("days since")==-1:
+                                nerr+=manageLog(fout,noerror,'Time units must be in "days since", you have:',ax.units)
+                            bnds = ax.getBounds()
+                            if bnds is not None:
+                                for i in range(len(ax)):
+                                    if ax[i]!=(bnds[i][0]+bnds[i][1])/2.:
+                                        nerr+=manageLog(fout,noerror,"Time values are not average of time bounds")
+                        try:
+                            u=cdtime.reltime(1,ax.units)
+                        except:
+                            nerr+=manageLog(fout, noerror, 'invalid time units:'+ax.units+', should be in the form: "'+Axes[nm]['units']+'"')
+                        try:
+                            c=ax.calendar
+                        except:
+                            c='none'
+                        if not c in ["gregorian","standard", "proleptic_gregorian","noleap","365_day","360_day","julian","none","non_standard"]:
+                            nerr+=manageLog(fout,noerror,"calendar must be one of [","gregorian","standard", "proleptic_gregorian","noleap","365_day","360_day","julian","none","non_standard ] yours is",c)
+                        if c=='365_day':
+                            c=cdtime.NoLeapCalendar
+                        else:
+                            c=ax.getCalendar()
+                        manageLog(fout,VERBOSE, '\t\tView First and Last times:\t',ax.asComponentTime(c)[0],'\t',ax.asComponentTime(c)[-1])
+                        tmpbnds=ax.getBounds()
+                        if tmpbnds is not None:
+                            manageLog(fout,VERBOSE, '\t\tView Bounds for first time:\t',cdtime.reltime(tmpbnds[0,0],ax.units).tocomp(c),'\t',cdtime.reltime(tmpbnds[0,1],ax.units).tocomp(c))
+                            manageLog(fout,VERBOSE, '\t\tView Bounds for last time:\t',cdtime.reltime(tmpbnds[-1,0],ax.units).tocomp(c),'\t',cdtime.reltime(tmpbnds[-1,1],ax.units).tocomp(c))
+                        else:
+                            manageLog(fout,VERBOSE,'\t\tNo Bounds for time')
+                            
+
+            tp=Axes[nm].get('type','double')
+            manageLog(fout,VERBOSE, '\t\tChecking axis is type',tp)
+
+            if tp == 'double' : tp='d'
+            elif tp == 'real' : tp='f'
+            elif tp == 'character' : tp='c'
+            elif tp == 'integer' : tp='l'
+            else:
+                nerr+=manageLog(fout, noerror, 'encountered unknown type:'+tp)
+            if ax.typecode()!=tp:
+                nerr+=manageLog(fout, noerror, 'required typecode for '+Nm+' should be '+tp+' not '+ax.typecode())
+
+            if ax.isLongitude():
+                manageLog(fout,VERBOSE, '\t\tChecking for axis attribute')
+                a=getattr(ax,'axis',None)
+                if a is None:
+                    nerr+=manageLog(fout, noerror, 'longitude axis must have associated axis attribute')
+                if a!='X':
+                    nerr+=manageLog(fout, noerror, 'longitude axis must have associated axis attribute set to X not: '+a)
+                manageLog(fout,VERBOSE, '\t\tChecking name')
+                if not ax.id in ['lon','longitude']:
+                    nerr+=manageLog(fout, noerror, 'longitude axis name must be longitude or lon (prefered) not: '+ax.id)
+##                 else:
+##                     ncheck+=1
+##                     if ax.id=='longitude':
+##                         nwarn+=1
+##                         manageLog(fout,cmor.CMOR_WARNING, '\t\t\tWe recomend longitude axis name to be: "lon"')
+                manageLog(fout,VERBOSE, '\t\tChecking that the first point is >= 0')
+                if ax[0]<0:
+                    nerr+=manageLog(fout, noerror, 'first longitude must be >= 0 degrees_east')
+                manageLog(fout,VERBOSE, '\t\tChecking that the longitude are in degrees (not rads)')
+                min,max=genutil.minmax(ax[:])
+                if max-min<6.3:
+                    nerr+=manageLog(fout, noerror, 'longitude must be stored in degree span is:'+str(max-min)+' looks like rad')
+            elif ax.isLatitude():
+                manageLog(fout,VERBOSE, '\t\tChecking for axis attribute')
+                a=getattr(ax,'axis',None)
+                if a is None:
+                    nerr+=manageLog(fout, noerror, 'latitude axis must have associated axis attribute')
+                if a!='Y':
+                    nerr+=manageLog(fout, noerror, 'latitude axis must have associated axis attribute set to Y not: '+a)
+                manageLog(fout,VERBOSE, '\t\tChecking name')
+                if not ax.id in ['lat','latitude']:
+                    nerr+=manageLog(fout, noerror, 'latitude axis name must be latitude or lat (prefered) not: '+ax.id)
+##                 else:
+##                     ncheck+=1
+##                     if ax.id=='latitude':
+##                         nwarn+=1
+##                         manageLog(fout,cmor.CMOR_WARNING, '\t\t\tWe recomend latitude axis name to be: "lat"')
+                manageLog(fout,VERBOSE, '\t\tChecking that the latitude are in degrees (not rads)')
+                min,max=genutil.minmax(ax[:])
+                if max-min<3.2:
+                    print ax[:]
+                    nerr+=manageLog(fout, noerror, 'latitude must be stored in degree span is:'+str(max-min)+' looks like rad')
+            elif ax.isTime() and len(ax[:])>1:
+                manageLog(fout,VERBOSE, '\t\tChecking for axis attribute')
+                a=getattr(ax,'axis',None)
+                if a is None:
+                    nerr+=manageLog(fout, noerror, 'time axis must have associated axis attribute')
+                if a!='T':
+                    nerr+=manageLog(fout, noerror, 'time axis must have associated axis attribute set to T not: '+a)
+                manageLog(fout,VERBOSE, '\t\tView calendar attribute: ','')
+                c=getattr(ax,'calendar',None)
+                if c is None:
+                    print >>fout
+                    nerr+=manageLog(fout, noerror, 'calendar attribute must be defined on time axis')
+                else:
+                    manageLog(fout,VERBOSE, c)
+                    
+            elif ax.isLevel():
+                manageLog(fout,VERBOSE, '\t\tChecking for axis attribute')
+                a=getattr(ax,'axis',None)
+                if a is None:
+                    nerr+=manageLog(fout, noerror, 'vertical axis must have associated axis attribute')
+                if a!='Z':
+                    nerr+=manageLog(fout, noerror, 'vertical axis must have associated axis attribute set to Z not: '+a)
+                manageLog(fout,VERBOSE, '\t\tChecking that level are stored with first level closest from surface')
+                ## ???
+                manageLog(fout,VERBOSE, '\t\tChecking positive attribute')
+                p=getattr(ax,'positive',None)
+                if not gnm in [ 'zlevel', 'alevel','olevel']:
+                    ncheck+=1
+                if p is None:
+                    if gnm in ['zlevel','alevel','olevel']:
+                        nerr+=manageLog(fout, noerror, 'vertical dimensions must have positive attribute')
+                    else:
+                        nwarn+=1
+                        manageLog(fout,cmor.CMOR_WARNING, 'The "positive" attribute should be defined for vertical dimensions.','name was:',nm,gnm)
+                        
+                elif not p in ['up','down']:
+                    nerr+=manageLog(fout, noerror, 'positive attribute on vertical dimension must be be up or down not: '+p)
+                if hasattr(ax,'formula_terms'):
+                    ncheck+=1
+                    if not hasattr(ax,'formula'):
+                        manageLog(fout,cmor.CMOR_WARNING, '\t\t\tLevel dimension has no attribute formula!')
+                        nwarn+=1
+                    ncheck+=1
+                    manageLog(fout,VERBOSE, '\t\tChecking that formula terms variables are stored')
+                    ft=getattr(ax,'formula_terms',None)
+                    ## figures out the names of formula_terms
+                    sp=ft.split(':')
+    ##                 manageLog(fout,VERBOSE, sp)
+                    for t in sp:
+    ##                     manageLog(fout,VERBOSE, 't is:',t)
+                        t=t.split()[-1]
+    ##                     manageLog(fout,VERBOSE, 'Now it is:',t)
+                        sp2=ft.split(t+':')[1].split()[0]
+                        if not sp2 in file.variables.keys():
+                            nerr+=manageLog(fout, noerror, 'formula_terms attribute indicates variable '+sp2+' should be stored in file')
+
+            if not docoord:
+                dirc=Axes[nm].get('stored_direction','increasing').lower()
+                if dirc == 'increasing':
+                    func=numpy.greater
+                elif dirc == 'decreasing':
+                    func=numpy.less
+                else:
+                    nerr+=manageLog(fout, noerror, 'unknown value for stored_direction:',dirc)
+                manageLog(fout,VERBOSE, '\t\tChecking that axis is stored '+dirc+'ly')
+                prev=ax[0]
+                for a in ax[1:]:
+                    if not func(a,prev):
+                        nerr+=manageLog(fout, noerror, 'axis values for '+Nm+' must be stored:'+dirc+'ly')
+                    prev=a
+                Mn,Mx=genutil.minmax(ax[:])
+                mn=Axes[nm].get('valid_min',None)
+                if mn is not None:
+                    manageLog(fout,VERBOSE, '\t\tChecking valid min',mn)
+                    if Mn<float(mn):
+                        nerr+=manageLog(fout, noerror, 'axis '+Nm+' invalid min:'+str(Mn)+' cannot be less than:'+mn)
+                mx=Axes[nm].get('valid_max',None)
+                if mx is not None:
+                    manageLog(fout,VERBOSE, '\t\tChecking valid max',mx)
+                    if Mx>float(mx):
+                        nerr+=manageLog(fout, noerror, 'axis '+Nm+' invalid max:'+str(Mx)+' cannot be greater than:'+mx)
+            rq=Axes[nm].get('requested',None)
+            if rq is not None:
+                manageLog(fout,VERBOSE, '\t\tChecking that requested values are present:',rq)
+                tol=float(Axes[nm].get('tol_on_requests',1.e-3))
+                for ir in range(len(rq)):
+                    r=rq[ir]
+                    found=0
+                    if docoord:
+                        for iv in range(len(ax[:])):
+                            v=ax[iv]
+                            st=''
+                            for vv in v:
+                                st+=str(vv)
+                            if r.strip().lower()==st.strip().lower():
+                                found=1
+                                ifound=iv
+                                break
+                    else:
+                        r=float(r)
+                        for iv in range(len(ax[:])):
+                            v=ax[iv]
+                            if abs(v-r)<tol:
+                                found=1
+                                ifound=iv
+                                break
+                    if found==0:
+                        nerr+=manageLog(fout, noerror, 'on axis '+Nm+' requested value '+str(r)+' not found')
+##                     elif ifound!=ir:
+##                         nerr+=manageLog(fout, noerror, 'on axis '+Nm+' requested value "'+str(r)+'" present but not in the correct order, it is at position '+str(ifound)+' but should be ordered '+str(ir)+' ( actual order should be: '+str(rq)+' )')
+
+            if 'bounds' in req_Att:
+                manageLog(fout,VERBOSE, '\t\tChecking for bounds')
+                b=getattr(ax,'bounds',None)
+                if b is None:
+    ##                 if ax.isLevel():
+    ##                     manageLog(fout,cmor.CMOR_WARNING, '\t\t\tLevel dimension has no bounds!')
+    ##                     nwarn+=1
+    ##                     ncheck+=1
+    ##                 if ax.isTime():
+    ##                     manageLog(fout,cmor.CMOR_WARNING, '\t\t\tTime dimension has no bounds!')
+    ##                     nwarn+=1
+    ##                     ncheck+=1
+    ##                 else:
+                        nerr+=manageLog(fout, noerror, 'dimension:'+Nm+' has no associated bounds')
+                else:
+                    manageLog(fout,VERBOSE, '\t\tChecking that defined bounds variable is in file')
+                    if not b in file.variables.keys():
+                        nerr+=manageLog(fout, noerror, 'dimension '+Nm+' associated bounds are defined to be '+b+' but the variable is not present in file')
+                    if ax.isTime():
+                        interv = Axes[nm].get('interval',None)
+                        tinterv = e['general'].get('approx_interval',None)
+                        if float(tinterv) == 30. and interv!=0:
+                            manageLog(fout,VERBOSE, '\t\tChecking that bounds are at beg and end of month')
+                            bnds=ax.getBounds()
+                            for ib in range(len(ax[:])):
+                                b=bnds[ib]
+                                c=ax.calendar
+                                if c=='365_day':
+                                    c=cdtime.NoLeapCalendar
+                                else:
+                                    c=ax.getCalendar()
+
+##                                 print 'Used calendar:',c
+                                beg=cdtime.reltime(b[0],ax.units).tocomp(c)
+                                end=cdtime.reltime(b[1],ax.units).tocomp(c)
+                                mid=cdtime.reltime(ax[ib],ax.units).tocomp(c)
+                                if beg.month!=mid.month:
+                                    nerr+=manageLog(fout, noerror, 'at time value: '+str(mid)+' (index: '+str(ib)+' ) bounds do not start in the same month than time value: '+str(beg))
+                                if beg.cmp(cdtime.comptime(beg.year,beg.month))!=0:
+                                    nerr+=manageLog(fout, noerror, 'at time value: '+str(mid)+' (index: '+str(ib)+' ) bounds do not start at begining of the month: '+str(beg))
+                                if end.month!=mid.add(1,cdtime.Month).month:
+                                    nerr+=manageLog(fout, noerror, 'at time value: '+str(mid)+' (index: '+str(ib)+' ) bounds do not end in the following month than time value: '+str(end))
+                                if end.cmp(beg.add(1,cdtime.Month))!=0:
+                                    nerr+=manageLog(fout, noerror, 'at time value: '+str(mid)+' (index: '+str(ib)+' ) bounds do not end at end of the month: '+str(end))
+
+    manageLog(fout,VERBOSE, 'Checking variable:',var)
+    req_var_Att = ['standard_name','units']
+    opt_var_Att=['original_name','history','long_name','comment','coordinates','cell_methods','original_units',"cell_measures"]
+    for etmp in etables:
+        ev = etmp['variable']
+        for v in ev.keys():
+            if v == var:
+                for p in ev[v].get("optional",[]):
+                    if p in req_var_Att:
+                        req_var_Att.pop(req_var_Att.index(p))
+    if major >1 and variable is None:
+        req_var_Att.append("associated_files")
+        req_var_Att.append("associated_files")
+        req_var_Att.append("long_name")
+        opt_var_Att.append("missing_value")
+        opt_var_Att.append("_FillValue")
+    if major>1:
+        for att in ['units','standard_name']:
+            if ev[var].get(att,None) is None:
+                req_var_Att.pop(req_var_Att.index(att))
+        for att in ['cell_measures','cell_methods','flag_values']:
+            if ev[var].get(att,None) is not None:
+                req_var_Att.append(att)
+        
+        
+    for o in Vars[var].get('optional',[]):
+        if not o in opt_var_Att:
+            opt_var_Att.append(o)
+    manageLog(fout,VERBOSE, '\tChecking if required attributes are set:','')
+    for r in req_var_Att:
+        manageLog(fout,VERBOSE, r,'')
+        val = getattr(V,r,None)
+        if val is None:
+            nerr+=manageLog(fout, noerror, 'Attribute '+r+' is required but not set for var '+var)
+        elif r!='units' and r.strip().lower()!='standard_name':
+            good_val=Vars[var].get(r,None)
+            if good_val is not None:
+                if val!=good_val:
+                    nerr+=manageLog(fout, noerror, 'variable attribute '+r+' should be: '+str(good_val)+' but is:'+str(val))
+            elif r=='associated_files':
+                if val.find("baseURL:") == -1:
+                    nerr+=manageLog(fout,noerror,"associated_files attributes must contain a baseURL")
+                elif val.find(e['general']['baseURL'].replace("http","http:")) == -1:
+                    nerr+=manageLog(fout,noerror,"wrong baseURL, should be: '%s', you have: " % e['general']['baseURL'].replace("http","http:"),val)
+                if Vars[var].get("cell_measures",None) is not None:
+                    sp=Vars[var].get("cell_measures").split()
+                    for i in range(len(sp)/2):
+                        if val.find(sp[i+1]+"_")==-1:
+                            nerr+=manageLog(fout,noerror,"associated files should point to file containing:",sp[i+1],'you have:',val)
+                            
+    print >>fout
+    tp=Vars[V.id].get('type','real')
+    manageLog(fout,VERBOSE, '\tChecking Variable typecode is',tp)
+    if tp == 'double' : tp='d'
+    elif tp == 'real' : tp='f'
+    elif tp == 'character' : tp='c'
+    elif tp == 'integer' : tp='l'
+    else:
+        nerr+=manageLog(fout, noerror, 'encountered unknown type:'+tp)
+    if V.typecode()!=tp:
+        nerr+=manageLog(fout, noerror, 'variable typecode must be '+tp+', it is:'+V.typecode())
+
+    if 'units' in req_var_Att:
+        manageLog(fout,VERBOSE, '\tChecking defined units')
+        U1=unidata.udunits(1,V.units)
+        try:
+            U2=U1.to(Vars[var]['units'])
+            if U2.value!=1:
+                nerr+=manageLog(fout, noerror, 'variable units:'+V.units+' do not match IPCC units:'+Vars[var]['units']+'\n'+\
+                      '1 '+V.units+' is actually :'+str(U2))
+        except:
+            nerr+=manageLog(fout, noerror, 'variable units:'+V.units+' do not match IPCC units:'+Vars[var]['units'])
+    if 'standard_name' in Vars[var].keys():
+        manageLog(fout,VERBOSE, '\tChecking standard name (case independent)')
+        if getattr(V,'standard_name','').lower().strip()!=Vars[var]['standard_name']:
+            nerr+=manageLog(fout, noerror, 'standard_name for '+var+' should be:'+Vars[var]['standard_name'])
+
+##     if hasattr(V,'_FillValue'):
+##         manageLog(fout,VERBOSE, '\tChecking for _FillValue')
+##         tp=Vars[V.id].get('type','real')
+##         if tp == 'double' :
+##             tpv=numpy.array([float(e['general'].get('double_missing_value',1.e20)),],'d')
+##         elif tp == 'real' :
+##             tpv=numpy.array([float(e['general'].get('missing_value',1.e20)),],'f')
+##         elif tp == 'integer' :
+##             tpv=numpy.array([int(e['general'].get('integer_missing_value',-192837)),],'i')
+##         else:
+##             nerr+=manageLog(fout, noerror, 'encountered unknown type:'+tp)
+##         print V.id,'type is:',tp,V._FillValue,tpv
+##         if getattr(V,'_FillValue')!=tpv:
+##             nerr+=manageLog(fout, noerror, '_FillValue must be '+str(tpv)+' (in the typecode of variable)')
+
+    manageLog(fout,VERBOSE, '\tChecking for warnings')
+    if hasattr(V,'_FillValue'):
+        if not hasattr(V,'missing_value'):
+            if major<2:
+                ncheck+=1        
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tYou defined _FillValue. We recommend you also define missing_value')
+                nwarn+=1
+            else:
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tYou defined _FillValue, You must also define missing_value')
+        elif V.missing_value!=V._FillValue:
+            nerr+=manageLog(fout, noerror, 'missing_value and _FillValue attributes are different')
+    if hasattr(V,'missing_value'):
+        if not hasattr(V,'_FillValue'):
+            if major<2:
+                ncheck+=1        
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tYou defined missing_value. We recommend you also define _FillValue')
+                nwarn+=1
+            else:
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tYou defined missing_value, You must also define _FillValue')
+        elif V.missing_value!=V._FillValue:
+            nerr+=manageLog(fout, noerror, 'missing_value and _FillValue attributes are different')
+        elif V.missing_value!=1.e20:
+            nerr+=manageLog(fout,noerror,'missing_value and _FillValue must be set to 1.e20f')
+        
+    if variable is None:
+        cm=Vars[var].get('cell_methods',[])
+        if cm!=[]:
+            manageLog(fout,VERBOSE, '\tChecking for cell_methods: ','')
+            if not hasattr(V,'cell_methods'):
+                print >> fout
+                nerr+=manageLog(fout, noerror, 'Variable '+var+' should have "cell_methods" attribute')
+            else:
+                 print >> fout,V.cell_methods
+               
+            cmv=getattr(V,'cell_methods','')
+            sp=cm.split('(')
+            cm=sp[0]
+            for s in sp[1:]:
+                cm+=s.split(')')[-1]
+            sp=cmv.split('(')
+            cmv=sp[0]
+            for s in sp[1:]:
+                cmv+=s.split(')')[-1]
+            sp=cm.split(':')
+            dic={}
+            kw=sp[0].strip()
+            for s in sp[1:]:
+                dic[kw]=s.split()[0].strip()
+                kw=s.split()[-1].strip()
+            sp=cmv.split(':')
+            dicv={}
+            kw=sp[0].strip()
+            for s in sp[1:]:
+                dicv[kw]=s.split()[0].strip()
+                kw=s.split()[-1].strip()
+            for kw in dic.keys():
+                if not kw in dicv.keys():
+                    nerr+=manageLog(fout, noerror, 'cell_methods must include '+kw+' defined (to: '+dic[kw]+' )')
+                elif not dicv[kw]==dic[kw]:
+                    nerr+=manageLog(fout, noerror, 'cell_method: '+kw+' definition does not match table, it is :'+dicv[kw]+' but should be: '+dic[kw])
+        for att in opt_var_Att:
+            ncheck+=1
+            if not hasattr(V,att):
+                nwarn+=1
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tWhen appropriate, it is often helpful to define the variable attribute: ',att)
+        for att in V.attributes.keys():
+            ncheck+=1
+            if not att in req_var_Att and not att in opt_var_Att:
+                nwarn+=1
+                manageLog(fout,cmor.CMOR_WARNING, '\t\tYou have attribute: %s, which is neither required nor optional ' % (att))
+
+        manageLog(fout,VERBOSE, '\n**********************************************************************************************\n')
+        manageLog(fout,VERBOSE, 'Done with main variable moving on to sub-variables')
+        for iv in range(len(vars3)):
+            manageLog(fout,VERBOSE, '\n----------------------------------------------------------------------------------------------\n')
+            v=vars3[iv]
+            fb=vars4[iv]
+            manageLog(fout,VERBOSE, 'Now Checking sub-variable:',v)
+            manageLog(fout,VERBOSE, '\n----------------------------------------------------------------------------------------------\n')
+            nwarn_add,ncheck_add,nerr_add=checkCMOR(fout,file,table,variable=v,from_bounds=fb,noerror=noerror)
+            nwarn+=nwarn_add
+            ncheck+=ncheck_add
+            nerr+=nerr
+        manageLog(fout,cmor.CMOR_WARNING, '%d warnings issued out of %d checked for (%5.2f%%)' % (nwarn,ncheck,float(nwarn)/ncheck*100))
+        if nerr!=0:
+            raise CMORError, str(nerr)+' CMOR errors were raise, please check output and correct your file !!!!'
+
+        file.close()
+    return nwarn,ncheck,nerr
+            
+if __name__=='__main__':
+    import getopt,sys
+
+    var=None
+
+    file='Test/tas_diurnal_A1_pcmdi-01_run01_20300101_20300301_clim.nc'
+    table='Test/climatology_test_table_A'
+    nargs = len(sys.argv)
+    
+    grid_table = None
+    
+    noerror=True
+    out='screen'
+    
+    help="""
+    Verify that a file is CMOR compliant
+
+    Usage:
+    """+sys.argv[0]+""" [--help] [-f /--file=filename] [-t /--table=tablename]
+    Where:
+      --help/-?/-h this message
+      --table/-t : specify table file to use
+      --file/-f specify file to check
+      --noerror/-e do not allow error on/off (default "on")
+      --out/-o screen or file name (file sends to inputfile.out)
+      """
+
+    kw=['file=','help','table=','noerror=','out=']
+    cmd='f:h?t:e:o:'
+    
+    opt=getopt.getopt(sys.argv[1:],cmd,kw)
+
+    if opt[1]!=[]:
+        file=opt[1][-1]
+    for o,p in opt[0]:
+        if o in ['--file','-f']:
+            file=p
+        if o in ['--table','-t']:
+            table=p
+        if o in ['--variable','-v']:
+            var=p
+        if o in ['--grid_table','-g']:
+            grid_table=p
+        if o in ['--help','-h','-?']:
+            print help
+            sys.exit()
+        if o in ['--noerror','-e']:
+            if p.lower() in ['off','0']:
+                noerror=False
+            elif p.lower() in ['on','1']:
+                noerror=True
+        if o in ['--out','-o']:
+            out=p
+
+    print 'File is:',file,file.find('*')
+    if os.path.isdir(file):
+        files=os.popen('ls '+file+'/*.nc').readlines()
+    elif file.find('*')>=0:
+        files=os.popen('ls '+file).readlines()
+    else:
+        files=[file]
+    print 'Files:',files
+    for file in files:
+        print 'Dealing with ',file.strip()
+        if out.lower()=='screen':
+            fout=sys.stdout
+        elif out.lower()=='file':
+            fout=".".join(file.strip().split('.')[:-1])+'.out'
+            fout=open(fout,'w')
+        else:
+            fout=open(out,'w')
+        if noerror:
+            checkCMOR(fout,file.strip(),table,other_tables=[grid_table,],noerror=noerror,variable=var)
+        else:
+            try:
+                checkCMOR(fout,file.strip(),table,other_tables=[grid_table,],noerror=noerror,variable=var)
+            except Exception,err:
+                print err
+           
diff --git a/Lib/cmor_const.py b/Lib/cmor_const.py
new file mode 100644
index 0000000..1b15cb5
--- /dev/null
+++ b/Lib/cmor_const.py
@@ -0,0 +1,41 @@
+import _cmor
+atts = """
+CMOR_MAX_STRING
+CMOR_MAX_ELEMENTS
+CMOR_MAX_AXES
+CMOR_MAX_VARIABLES
+CMOR_MAX_GRIDS
+CMOR_MAX_DIMENSIONS
+CMOR_MAX_ATTRIBUTES
+CMOR_MAX_ERRORS
+CMOR_MAX_TABLES
+CMOR_MAX_GRID_ATTRIBUTES
+CMOR_QUIET
+CMOR_EXIT_ON_MAJOR
+CMOR_EXIT
+CMOR_EXIT_ON_WARNING
+CMOR_VERSION_MAJOR
+CMOR_VERSION_MINOR
+CMOR_VERSION_PATCH
+CMOR_CF_VERSION_MAJOR
+CMOR_CF_VERSION_MINOR
+CMOR_WARNING
+CMOR_NORMAL
+CMOR_CRITICAL
+CMOR_N_VALID_CALS
+CMOR_PRESERVE
+CMOR_APPEND
+CMOR_REPLACE
+CMOR_PRESERVE_3
+CMOR_APPEND_3
+CMOR_REPLACE_3
+CMOR_PRESERVE_4
+CMOR_APPEND_4
+CMOR_REPLACE_4
+"""
+
+for att in atts.split():
+    attnm=att
+    exec("%s = _cmor.getCMOR_defaults_include('%s')" % (att,att))
+    
+    
diff --git a/Lib/gen_table_md5s.py b/Lib/gen_table_md5s.py
new file mode 100644
index 0000000..c9a9656
--- /dev/null
+++ b/Lib/gen_table_md5s.py
@@ -0,0 +1,37 @@
+import hashlib
+
+import os
+
+ls=os.popen("ls Tables/CMIP5*")
+
+if os.path.exists("Tables/md5s"):
+    f=open("Tables/md5s")
+    tbls=eval(f.read())
+    f.close()
+else:
+    tbls={}
+
+for l in ls:
+    fnm = l.strip()
+    f=open(fnm)
+    t=f.read()
+    i=t.find("table_id:")
+    id=t[i+9:].split("\n")[0].split()[-1]
+    i=t.find("table_date:")
+    date = t[i+11:].split("\n")[0].split("!")[0].strip()
+    i=t.find("project_id:")
+    pid = t[i+11:].split("\n")[0].split("!")[0].strip()
+    md5=hashlib.md5(t)
+    md5=md5.hexdigest()
+    print fnm,pid,id,date,md5
+    pdic = tbls.get(pid,{})
+    tdic = pdic.get(id,{})
+    if tdic.has_key(date):
+        print "WARNING: Replacing exisiting date for date %s in table %s of project %s" % (date,id,pid)
+    tdic[date]=md5
+    pdic[id]=tdic
+    tbls[pid]=pdic
+
+f=open("Tables/md5s","w")
+f.write(repr(tbls))
+f.close()
diff --git a/Lib/pywrapper.py b/Lib/pywrapper.py
new file mode 100644
index 0000000..cb99704
--- /dev/null
+++ b/Lib/pywrapper.py
@@ -0,0 +1,903 @@
+
+import cmor_const,numpy,os,_cmor
+
+try:
+    import cdtime
+    has_cdtime = True
+except:
+    has_cdtime = False
+
+try:
+    import cdms2
+    has_cdms2 = True
+except:
+    has_cdms2 = False
+
+try:
+    import MV2
+    has_MV2 = True
+except:
+    has_MV2 = False
+
+try:
+    import numpy.oldnumeric.ma.MaskedArray
+    has_oldma = True
+except:
+    has_oldma = False
+
+def time_varying_grid_coordinate(grid_id, table_entry,units,type='f',missing_value=None):
+    """ Create a cmor variable for grid coordinates in case of time varying grids
+    Usage:
+    coord_grid_id = grid_time_varying_coordinate(grid_id, table_entry,units,type='f',missing_value=None)
+    Where:
+    grid_id : The grid_id return by a call to cmor.grid
+    table_entry: The name of the variable in the CMOR table
+    units: variable units
+    type: type of the missing_value, which must be the same as the type of the array  that will be passed to cmor_write.  The options are: 'd' (double), 'f' (float), 'l' (long) or 'i' (int).
+    missing_value : scalar that is used to indicate missing data for this variable.  It must be the same type as the data that will be passed to cmor_write.  This missing_value will in general be replaced by a standard missing_value specified in the MIP table.  If there are no missing data, and the user chooses not to declare the missing value, then this argument may be either omitted or assigned the value 'none' (i.e., missing_value='none').
+    """
+    if not isinstance(table_entry,str):
+        raise Exception, "Error you must pass a string for the variable table_entry"
+    
+    if not isinstance(units,str):
+        raise Exception, "Error you must pass a string for the variable units"
+    if not isinstance(type,str):
+        raise Exception, "error tpye must a a string"
+    type = type.lower()
+    if type == 's':
+        type ='c'
+    if not type in ["c","d","f","l","i"]:
+        raise Exception, 'error unknown type: "%s", must be one of: "c","d","f","l","i"'
+
+    if not isinstance(grid_id,(int,numpy.int,numpy.int32)):
+        raise Exception, "error grid_id must be an integer"
+    grid_id = int(grid_id)
+
+    if missing_value is not None:
+        if not isinstance(missing_value,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
+            raise Exception, "error missing_value must be a number, you passed: %s" % type(missing_value)
+        missing_value = float(missing_value)
+        
+    return _cmor.time_varying_grid_coordinate(grid_id,table_entry,units,type,missing_value)
+    
+
+def grid(axis_ids,latitude=None,longitude=None,latitude_vertices=None,longitude_vertices=None,nvertices=None):
+    """ Creates a cmor grid
+    Usage:
+    grid_id = grid(axis_ids,latitude,longitude,latitude_vertices=None,longitude_vertices=None)
+    Where:
+    axis_ids : array contianing the axes ids for this grid.
+    latitude/longitude: the values for longitude/latitude arrays (unless it is a time varying grid)
+    latitude_vertices/longitude_vertices: coordinates of vertices for each latitude/latitude (unless it is a time varying grid)
+    """
+    if numpy.ma.isMA(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_oldma and numpy.oldnumeric.ma.isMA(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_cdms2 and cdms2.isVariable(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_cdms2 and cdms2.isVariable(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif isinstance(axis_ids,(list,tuple)):
+        axis_ids = numpy.ascontiguousarray(axis_ids)
+    elif not isinstance(axis_ids, numpy.ndarray):
+        raise Exception, "Error could not convert axis_ids list to a numpy array"
+
+    if numpy.rank(axis_ids)>1:
+        raise Exception, "error axes list/array must be 1D"
+
+    if latitude is not None:
+        if not isinstance(latitude,numpy.ndarray):
+            try:
+                latitude = numpy.ascontiguousarray(latitude.filled())
+            except:
+                raise Exception, "Error could not convert latitude to a numpy array"
+            if numpy.rank(latitude)!=len(axis_ids):
+                raise Exception, "latitude's rank does not match number of axes passed via axis_ids"
+
+        type = latitude.dtype.char
+        nvert = 0
+        if not type in ['d','f','i','l']:
+            raise Exception, "latitude array must be of type 'd','f','l' or 'i'"
+
+        if not isinstance(longitude,numpy.ndarray):
+            try:
+                longitude = numpy.ascontiguousarray(longitude.filled())
+            except:
+                raise Exception, "Error could not convert longitude to a numpy array"
+            if numpy.rank(longitude)!=len(axis_ids):
+                raise Exception, "longitude's rank does not match number of axes passed via axis_ids"
+    ##     print 'longitude type:',longitude.dtype.char
+        if longitude.dtype.char!=type:
+            longitude = longitude.astype(type)
+    elif longitude is not None:
+        raise Exception, "latitude and longitude must be BOTH an array or None"
+    else:
+        type='f'
+        if nvertices is None :
+            nvert=0
+        else:
+            nvert = nvertices
+        
+    if latitude_vertices is not None:
+        if not isinstance(latitude_vertices,numpy.ndarray):
+            try:
+                latitude_vertices = numpy.ascontiguousarray(latitude_vertices.filled())
+            except:
+                raise Exception, "Error could not convert latitude_vertices to a numpy array"
+            if numpy.rank(latitude_vertices)!=len(axis_ids)+1:
+                raise Exception, "latitude_vertices's rank does not match number of axes passed via axis_ids +1 (for vertices)"
+##         print 'latitude_vert type:',latitude_vertices.dtype.char
+        if latitude_vertices.dtype.char!=type:
+            latitude_vertices = latitude_vertices.astype(type)
+        nvert = latitude_vertices.shape[-1]
+        if nvertices is not None:
+            if nvert!=nvertices:
+                raise Exception,"you passed nvertices as: %i, but from your latitude_vertices it seems to be: %i" % (nvertices,nvert)
+        
+    if longitude_vertices is not None:
+        if not isinstance(longitude_vertices,numpy.ndarray):
+            try:
+                longitude_vertices = numpy.ascontiguousarray(longitude_vertices.filled())
+            except:
+                raise Exception, "Error could not convert longitude_vertices to a numpy array"
+            if numpy.rank(longitude_vertices)!=len(axis_ids)+1:
+                raise Exception, "longitude_vertices's rank does not match number of axes passed via axis_ids +1 (for vertices)"
+##         print 'longitude_vert type:',longitude_vertices.dtype.char
+        if longitude_vertices.dtype.char!=type:
+            longitude_vertices = longitude_vertices.astype(type)
+        nvert2 = longitude.shape[-1]
+        if latitude_vertices is None:
+            nvert = nvert2
+        elif nvert!=nvert2:
+            raise Exception, "error in shape longitude_vertices and latitude_vertices seem to have different # of vertices"
+        if nvertices is not None:
+            if nvert!=nvertices:
+                raise Exception,"you passed nvertices as: %i, but from your longitude_vertices it seems to be: %i" % (nvertices,nvert)
+
+        
+##     if area is not None:
+##         if not isinstance(area,numpy.ndarray):
+##             try:
+##                 area = numpy.ascontiguousarray(area.filled())
+##             except:
+##                 raise Exception, "Error could not convert area to a numpy array"
+##             if numpy.rank(area)!=len(axis_ids):
+##                 raise Exception, "area's rank does not match number of axes passed via axis_ids"
+##         if area.dtype.char!=type:
+##             area = area.astype(type)
+    n = len(axis_ids)
+    axis_ids=axis_ids.astype('i');
+    return _cmor.grid(n,axis_ids,type,latitude,longitude,nvert,latitude_vertices,longitude_vertices)
+
+
+def set_grid_mapping(grid_id,mapping_name,parameter_names,parameter_values=None,parameter_units=None):
+    """Sets the grid mapping for CF convention
+    Usage:
+       set_grid_mapping(grid_id,mapping_name,parameter_names,parameter_values,parameter_units)
+    Where:
+       grid_id :: grid_id return by cmor.grid
+       mapping_name     :: name of the mapping (see CF conventions)
+       parameter_names  :: list of parameter names or dictionary with name as keys and values can be either [value,units] list/tuple or dictionary with "values"/"units" as keys
+       parameter_values :: array/list of parameter values in the same order of parameter_names (ignored if parameter_names is ditcionary)
+       parameter_units  :: array/list of parameter units  in the same order of parameter_names (ignored if parameter_names is ditcionary)
+    """
+    if not isinstance(grid_id,(numpy.int32,int,long)):
+        raise Exception, "grid_id must be an integer: %s"%type(grid_id)
+    if not isinstance(mapping_name,str):
+        raise Exception, "mapping name must be a string"
+
+    if isinstance(parameter_names,dict):
+        pnams = []
+        pvals = []
+        punit = []
+        for k in parameter_names.keys():
+            pnams.append(k)
+            val = parameter_names[k]
+            if isinstance(val,dict):
+                ks = val.keys()
+                if not 'value' in ks or not 'units' in ks:
+                    raise Exception, "error parameter_names key '%s' dictionary does not contain both 'units' and 'value' keys" % k
+                pvals.append(val['value'])
+                punit.append(val['units'])
+            elif isinstance(val,(list,tuple)):
+                if len(val)>2:
+                    raise Exception, "parameter_names '%s' as more than 2 values" % k
+                for v in val:
+                    if isinstance(v,str):
+                        punit.append(v)
+                    try:
+                        pvals.append(float(v))
+                    except:
+                        pass
+                if len(pvals)!=len(punits) or len(pvals)!=len(pnams):
+                    raise Exception, "could not figure out values for parameter_name: '%s' " % k
+            else:
+                raise Exception, "could not figure out values for parameter_name: '%s' " % k
+    elif isinstance(parameter_names,(list,tuple)):
+        pnms = list(parameter_names)
+        # now do code for parameter_units
+        if parameter_values is None:
+            raise Exception, "you must pass a list or array for parameter_values"
+        if parameter_units is None:
+            raise Exception, "you must pass a list for parameter_units"
+        if not isinstance(parameter_units,(list,tuple)):
+            raise Exception, "you must pass a list for parameter_units"
+        if len(parameter_units)!=len(pnms):
+            raise Exception, "length of parameter_units list does not match length of parameter_names"
+        punit = list(parameter_units)
+        if isinstance(parameter_values,(list,tuple)):
+            pvals = list(parameter_values)
+        else:
+            try:
+                pvals = numpy.ascontiguousarray(parameter_values.filled())
+            except:
+                raise Exception, "Error could not convert parameter_values to a numpy array"
+        if len(pvals) != len(parameter_names):
+            raise Exception, "length of parameter_values list does not match length of parameter_names"
+    else:
+        raise Exception, "parameter_names must be either dictionary or list"
+
+    pvals = numpy.ascontiguousarray(pvals).astype('d')
+    return _cmor.set_grid_mapping(grid_id,mapping_name,pnms,pvals,punit)
+
+    
+
+def axis(table_entry,units=None,length=None,coord_vals=None,cell_bounds=None,interval=None):
+    """ Creates an cmor_axis
+    Usage:
+    axis_id = axis(table_entry,units=None,length=None,coord_vals=None,cell_bounds=None,interval=None)
+    Where:
+    table_entry: table_entry in the cmor table
+    units: the axis units
+    length: the number of coord_vals to actuall y use, or simply the number of coord_vals in case in index_only axes
+    coord_vals: cmds2 axis or numpy/MV2 array (1D)
+    cell_bounds: numpy or MV2 array, if coord_vals is a cdms2 axis then will try to obtain bounds from it
+    interval: a string used for time axes only (???)
+    """
+    if not isinstance(table_entry,str):
+        raise Exception, "You need to pass a table_entry to match in the cmor table"
+
+    if coord_vals is None:
+        if cell_bounds is not None:
+            raise Exception, "you passed cell_bounds but no coords"
+    else:
+        if has_cdms2 and isinstance(coord_vals,cdms2.axis.TransientAxis):
+            if units is None:
+                if hasattr(coord_vals,"units"):
+                    units = coord_vals.units
+            if cell_bounds is None:
+                cell_bounds = coord_vals.getBounds()
+
+            if interval is None and hasattr(coord_vals,"interval"):
+                interval = coord_vals.interval
+            coord_vals = numpy.ascontiguousarray(coord_vals[:])
+        elif isinstance(coord_vals,(list,tuple)):
+            coord_vals = numpy.ascontiguousarray(coord_vals)
+        elif has_cdms2 and cdms2.isVariable(coord_vals):
+            if units is None:
+                if hasattr(coord_vals,"units"):
+                    units = coord_vals.units
+            if interval is None and hasattr(coord_vals,"interval"):
+                interval = coord_vals.interval
+            coord_vals = numpy.ascontiguousarray(coord_vals.filled())
+        elif has_oldma and numpy.oldnumeric.ma.isMA(coord_vals):
+            coord_vals = numpy.ascontiguousarray(coord_vals.filled())
+        elif numpy.ma.isMA(coord_vals):
+            coord_vals = numpy.ascontiguousarray(coord_vals.filled())
+
+        if not isinstance(coord_vals,numpy.ndarray):
+            raise Exception, "Error coord_vals must be an array or cdms2 axis or list/tuple"
+
+        if numpy.rank(coord_vals)>1:
+            raise Exception, "Error, you must pass a 1D array!"
+
+    if numpy.ma.isMA(cell_bounds):
+        cell_bounds = numpy.ascontiguousarray(cell_bounds.filled())
+    elif has_oldma and numpy.oldnumeric.ma.isMA(cell_bounds):
+        cell_bounds = numpy.ascontiguousarray(cell_bounds.filled())
+    elif has_cdms2 and cdms2.isVariable(cell_bounds):
+        cell_bounds = numpy.ascontiguousarray(cell_bounds.filled())
+    elif has_cdms2 and cdms2.isVariable(cell_bounds):
+        cell_bounds = numpy.ascontiguousarray(cell_bounds.filled())
+    elif isinstance(cell_bounds,(list,tuple)):
+        cell_bounds = numpy.ascontiguousarray(cell_bounds)
+        
+    if cell_bounds is not None:
+        if numpy.rank(cell_bounds)>2:
+            raise Exception, "Error cell_bounds rank must be at most 2"
+        if numpy.rank(cell_bounds)==2:
+            if cell_bounds.shape[0]!=coord_vals.shape[0]:
+                raise Exception, "Error, coord_vals and cell_bounds do not have the same length"
+            if cell_bounds.shape[1]!=2:
+                raise Exception, "Error, cell_bounds' second dimension must be of length 2"
+            cbnds = 2
+            cell_bounds = numpy.ascontiguousarray(numpy.ravel(cell_bounds))
+        else:
+            cbnds = 1
+            if len(cell_bounds)!=len(coord_vals)+1:
+                raise Exception, "error cell_bounds are %i long and axes coord_vals are %i long this is not consistent" % (len(cell_bounds),len(coord_vals))
+    else:
+        cbnds = 0
+
+    if coord_vals is not None:
+        l = len(coord_vals)
+        type = coord_vals.dtype.char[0]
+
+        if not type in ['i','l','f','d','S']:
+            raise Exception, "error allowed data type are: i,l,f,d or S"
+
+        if type == 'S':
+            type = 'c'
+            cbnds = 0
+            for s in coord_vals:
+                #print 'testing:',s,len(s)
+                if len(s)>cbnds:
+                    cbnds = len(s)
+            #cbnds+=1
+    else:
+        l = 0
+        type = 'd'
+        
+    if cell_bounds is not None:
+        if type !=cell_bounds.dtype.char:
+            cell_bounds = cell_bounds.astype(type)
+            
+    if units is None:
+        if coord_vals is not None:
+            raise Exception, "Error you need to provide the units your coord_vals are in"
+        else:
+            units = "1"
+    
+    if interval is None:
+        interval = ""
+
+    if length is not None:
+        l = int(length)
+        
+    return _cmor.axis(table_entry,units,l,coord_vals,type,cell_bounds,cbnds,interval)
+
+def variable(table_entry,units,axis_ids,type='f',missing_value=None,tolerance = 1.e-4,positive=None,original_name=None,history=None,comment=None):
+    
+    if not isinstance(table_entry,str):
+        raise Exception, "Error you must pass a string for the variable table_entry"
+    
+    if not isinstance(units,str):
+        raise Exception, "Error you must pass a string for the variable units"
+
+    if original_name is not None:
+        if not isinstance(original_name,str):
+            raise Exception, "Error you must pass a string for the variable original_name"
+    else:
+        original_name = ""
+        
+    if history is not None:
+        if not isinstance(history,str):
+            raise Exception, "Error you must pass a string for the variable history"
+    else:
+        history = ""
+        
+    if comment is not None:
+        if not isinstance(comment,str):
+            raise Exception, "Error you must pass a string for the variable comment"
+    else:
+        comment = ""
+        
+    if numpy.ma.isMA(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_oldma and numpy.oldnumeric.ma.isMA(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_cdms2 and cdms2.isVariable(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif isinstance(axis_ids,(list,tuple)):
+        axis_ids = numpy.ascontiguousarray(axis_ids)
+    elif not isinstance(axis_ids, numpy.ndarray):
+        raise Exception, "Error could not convert axis_ids list to a numpy array"
+
+    if numpy.rank(axis_ids)>1:
+        raise Exception, "error axis_ids list/array must be 1D"
+
+    if not isinstance(type,str):
+        raise Exception, "error tpye must a a string"
+    type = type.lower()
+    if type == 's':
+        type ='c'
+    if not type in ["c","d","f","l","i"]:
+        raise Exception, 'error unknown type: "%s", must be one of: "c","d","f","l","i"'
+
+    ndims = len(axis_ids)
+
+    if positive is None:
+        positive = ""
+    else:
+        positive = str(positive)
+
+    if history is None:
+        history = ""
+    else:
+        history = str(history)
+
+    if comment is None:
+        comment = ""
+    else:
+        comment = str(comment)
+
+    if not isinstance(tolerance,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
+        raise Exception, "error tolerance must be a number"
+
+    tolerance = float(tolerance)
+
+    if missing_value is not None:
+        if not isinstance(missing_value,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
+            raise Exception, "error missing_value must be a number, you passed: %s" % repr(missing_value)
+
+        missing_value = float(missing_value)
+
+    axis_ids=axis_ids.astype('i')
+    return _cmor.variable(table_entry,units,ndims,axis_ids,type,missing_value,tolerance,positive,original_name,history,comment)
+    
+def zfactor(zaxis_id,zfactor_name,units="",axis_ids=None,type=None,zfactor_values=None,zfactor_bounds=None):
+
+    if not isinstance(zaxis_id,(int,numpy.int,numpy.int32)):
+        raise Exception, "error zaxis_id must be a number"
+    zaxis_id = int(zaxis_id)
+
+    if not isinstance(zfactor_name,str):
+        raise Exception, "Error you must pass a string for the variable zfactor_name"
+    
+    if not isinstance(units,str):
+        raise Exception, "Error you must pass a string for the variable units"
+
+    if numpy.ma.isMA(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_oldma and numpy.oldnumeric.ma.isMA(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_cdms2 and cdms2.isVariable(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif has_cdms2 and cdms2.isVariable(axis_ids):
+        axis_ids = numpy.ascontiguousarray(axis_ids.filled())
+    elif isinstance(axis_ids,(list,tuple)):
+        axis_ids = numpy.ascontiguousarray(axis_ids)
+    elif axis_ids is None:
+        pass
+    elif isinstance(axis_ids,(int,numpy.int,numpy.int32)):
+        axis_ids = numpy.array([axis_ids,])
+    elif not isinstance(axis_ids, numpy.ndarray):
+        raise Exception, "Error could not convert axis_ids list to a numpy array"
+
+    if numpy.rank(axis_ids)>1:
+        raise Exception, "error axis_ids list/array must be 1D"
+
+    if axis_ids is None:
+        ndims = 0
+        axis_ids = numpy.array(1)
+    else:
+        ndims = len(axis_ids)
+
+##     if ndims>1 and zfactor_values is not None:
+##         raise Exception, "Error you can only pass zfactor_values for zfactor with rank <=1"
+##     if ndims>1 and zfactor_bounds is not None:
+##         raise Exception, "Error you can only pass zfactor_bounds for zfactor with rank <=1"
+
+    if zfactor_values is not None:
+        if isinstance(zfactor_values,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
+            zfactor_values = numpy.array((zfactor_values,))
+        elif numpy.ma.isMA(zfactor_values):
+            zfactor_values = numpy.ascontiguousarray(zfactor_values.filled())
+        elif has_oldma and numpy.oldnumeric.ma.isMA(zfactor_values):
+            zfactor_values = numpy.ascontiguousarray(zfactor_values.filled())
+        elif has_cdms2 and cdms2.isVariable(zfactor_values):
+            zfactor_values = numpy.ascontiguousarray(zfactor_values.filled())
+        elif isinstance(zfactor_values,(list,tuple)):
+            zfactor_values = numpy.ascontiguousarray(zfactor_values)
+        elif not isinstance(zfactor_values, numpy.ndarray):
+            raise Exception, "Error could not convert zfactor_values to a numpy array"
+
+        if type is None:
+            try:
+                type = zfactor_values.dtype.char
+            except:
+                if isinstance(zfactor_values,(float,numpy.float,numpy.float32)):
+                    type = 'f'
+                elif isinstance(zfactor_values,(int,numpy.int,numpy.int32)):
+                    type = 'd'
+                else:
+                    raise Exception, "Error unknown type for zfactor_values: %s" % repr(zfactor_values)
+    elif type is None:
+        type='d'
+        
+        
+    if not isinstance(type,str):
+        raise Exception, "error tpye must a a string"
+    type = type.lower()
+    if type == 's':
+        type ='c'
+    if not type in ["c","d","f","l","i"]:
+        raise Exception, 'error unknown type: "%s", must be one of: "c","d","f","l","i"'
+    
+    if zfactor_bounds is not None:
+        if numpy.ma.isMA(zfactor_bounds):
+            zfactor_bounds = numpy.ascontiguousarray(zfactor_bounds.filled())
+        elif has_oldma and numpy.oldnumeric.ma.isMA(zfactor_bounds):
+            zfactor_bounds = numpy.ascontiguousarray(zfactor_bounds.filled())
+        elif has_cdms2 and cdms2.isVariable(zfactor_bounds):
+            zfactor_bounds = numpy.ascontiguousarray(zfactor_bounds.filled())
+        elif isinstance(zfactor_bounds,(list,tuple)):
+            zfactor_bounds = numpy.ascontiguousarray(zfactor_bounds)
+        elif not isinstance(zfactor_bounds, numpy.ndarray):
+            raise Exception, "Error could not convert zfactor_bounds to a numpy array"
+        if numpy.rank(zfactor_bounds)>2:
+            raise Exception, "error zfactor_bounds must be rank 2 at most"
+        elif numpy.rank(zfactor_bounds)==2:
+            if zfactor_bounds.shape[1]!=2:
+                raise Exception, "error zfactor_bounds' 2nd dimension must be of length 2"
+            bnds =[]
+            for i in range(zfactor_bounds.shape[0]-1):
+                b = zfactor_bounds[i]
+                bnds.append(b[0])
+                if b[1]!=zfactor_bounds[i+1][0]:
+                    raise Exception, "error zfactor_bounds have gaps between them"
+            bnds.append(b[1])
+            zfactor_bounds=numpy.array(bnds)
+    axis_ids = axis_ids.astype('i')
+    return _cmor.zfactor(zaxis_id,zfactor_name,units,ndims,axis_ids,type,zfactor_values,zfactor_bounds)
+
+def write(var_id,data,ntimes_passed=None,file_suffix="",time_vals=None,time_bnds=None,store_with=None):
+
+    if not isinstance(var_id,(int,numpy.int,numpy.int32)):
+        raise Exception, "error var_id must be an integer"
+    var_id = int(var_id)
+
+    if not isinstance(file_suffix,str):
+        raise Exception,  "Error file_suffix must be a string"
+
+    if store_with is not None:
+        if not isinstance(store_with,(int,numpy.int,numpy.int32)):
+            raise Exception, "error store_with must be an integer"
+        store_with = int(store_with)
+
+    if numpy.ma.isMA(data):
+        data = numpy.ascontiguousarray(data.filled())
+    elif has_oldma and numpy.oldnumeric.ma.isMA(data):
+        data = numpy.ascontiguousarray(data.filled())
+    elif has_cdms2 and cdms2.isVariable(data):
+        if time_vals is None:
+            time_vals = data.getTime() 
+        data = numpy.ascontiguousarray(data.filled())
+    elif isinstance(data,(list,tuple)):
+        data = numpy.ascontiguousarray(data)
+    elif not isinstance(data, numpy.ndarray):
+            raise Exception, "Error could not convert data to a numpy array"
+
+
+    if time_vals is None:
+        pass
+    elif numpy.ma.isMA(time_vals):
+        time_vals = numpy.ascontiguousarray(time_vals.filled())
+    elif has_oldma and numpy.oldnumeric.ma.isMA(time_vals):
+        time_vals = numpy.ascontiguousarray(time_vals.filled())
+    elif has_cdms2 and isinstance(time_vals,cdms2.axis.TransientAxis):
+        if time_bnds is None:
+            time_bnds = time_vals.getBounds()
+        time_vals = numpy.ascontiguousarray(time_vals[:])
+    elif has_cdms2 and cdms2.isVariable(time_vals):
+        time_vals = numpy.ascontiguousarray(time_vals.filled())
+    elif isinstance(time_vals,(list,tuple)):
+        time_vals = numpy.ascontiguousarray(time_vals)
+    elif not isinstance(time_vals, numpy.ndarray):
+        try:
+            time_vals = numpy.ascontiguousarray(time_vals)
+        except:
+            raise Exception, "Error could not convert time_vals to a numpy array"
+
+    if time_vals is not None:
+        type = time_vals.dtype.char
+        if not type in ['f','d','i','l']:
+            raise Exception, "Error time_vals type must one of: 'f','d','i','l', please convert first"
+        time_vals=time_vals.astype("d")
+       
+
+    if ntimes_passed is None:
+        if time_vals is None:
+            ntimes_passed = 0
+        else:
+            ntimes_passed = len(time_vals)
+    if not isinstance(ntimes_passed,(int,numpy.int,numpy.int32)):
+        raise Exception, "error ntimes_passed must be an integer"
+    ntimes_passed = int(ntimes_passed)
+
+
+    #At that ponit we check that shapes matches!
+    goodshape = _cmor.get_original_shape(var_id,1)
+    osh = data.shape
+    ogoodshape=list(goodshape)
+    sh=list(osh)
+    j=0
+    while sh.count(1)>0:
+        sh.remove(1)
+    while goodshape.count(1)>0:
+        goodshape.remove(1)
+    for i in range(len(goodshape)):
+        if goodshape[i]!=0:
+            if sh[j]!=goodshape[i]:
+                if goodshape[i]!=1:
+                    raise Exception,"error your data shape (%s) does not match the expect variable shape (%s)" % (str(osh),str(ogoodshape))
+            j+=1
+        elif ntimes_passed!=1:
+            j+=1
+
+
+
+    data = numpy.ascontiguousarray(numpy.ravel(data))
+
+
+    if time_bnds is not None:
+        if numpy.ma.isMA(time_bnds):
+            time_bnds = numpy.ascontiguousarray(time_bnds.filled())
+        elif has_oldma and numpy.oldnumeric.ma.isMA(time_bnds):
+            time_bnds = numpy.ascontiguousarray(time_bnds.filled())
+        elif has_cdms2 and cdms2.isVariable(time_bnds):
+            if time_vals is None:
+                time_vals = time_bnds.getTime() 
+            time_bnds = numpy.ascontiguousarray(time_bnds.filled())
+        elif isinstance(time_bnds,(list,tuple)):
+            time_bnds = numpy.ascontiguousarray(time_bnds)
+        elif not isinstance(time_bnds, numpy.ndarray):
+            raise Exception, "Error could not convert time_bnds to a numpy array"
+
+        if numpy.rank(time_bnds)>2:
+            raise Exception, "bounds rank cannot be greater than 2"
+        elif numpy.rank(time_bnds)==2:
+            if time_bnds.shape[1]!=2:
+                raise Exception, "error time_bnds' 2nd dimension must be of length 2"
+            bnds =[]
+            if time_bnds.shape[0] > 1:
+                _check_time_bounds_contiguous(time_bnds)
+                bnds = _flatten_time_bounds(time_bnds)
+            else:
+                bnds = time_bnds.ravel()
+            time_bnds=numpy.array(bnds)
+        else: # ok it is a rank 1!
+            if numpy.rank(time_vals)==0:
+                ltv=1
+            else:
+                ltv=len(time_vals)
+            if len(time_bnds)!=ltv+1:
+                raise Excpetion,"error time_bnds if 1D must be 1 elt greater than time_vals, you have %i vs %i" % (len(time_bnds),ltv)
+            bnds=[]
+            for i in range(ltv):
+                bnds.append([time_bnds[i],time_bnds[i+1]])
+            bnds=numpy.array(bnds)
+            bnds = _flatten_time_bounds(bnds)
+            time_bnds=numpy.array(bnds)
+
+    if time_bnds is not None:
+        type = time_bnds.dtype.char
+        if not type in ['f','d','i','l']:
+            raise Exception, "Error time_bnds type must one of: 'f','d','i','l', please convert first"
+        time_bnds=time_bnds.astype("d")
+
+    type = data.dtype.char
+    if not type in ['f','d','i','l']:
+        raise Exception, "Error data type must one of: 'f','d','i','l', please convert first"
+
+    return _cmor.write(var_id,data,type,file_suffix,ntimes_passed,time_vals,time_bnds,store_with)
+
+def _check_time_bounds_contiguous(time_bnds):
+    '''
+    checks that time bounds are contiguous
+    '''
+    for i in range(time_bnds.shape[0] - 1 ):
+        b = time_bnds[i]
+        if b[1]!=time_bnds[i+1][0]:
+            raise Exception, "error time_bnds have gaps between them"
+
+def _flatten_time_bounds(time_bnds):
+    '''
+    return a 1-d list of the time_bnds flattened appropriate for the C call
+    '''
+    bnds = list()
+    for i in range(time_bnds.shape[0]):
+        bnds.extend([time_bnds[i][0], time_bnds[i][1]])
+    return bnds
+
+def setup(inpath='.',netcdf_file_action=cmor_const.CMOR_PRESERVE,set_verbosity=cmor_const.CMOR_NORMAL,exit_control=cmor_const.CMOR_NORMAL,logfile=None,create_subdirectories=1):
+    """
+    Usage cmor_setup(inpath='.',netcdf_file_action=cmor.CMOR_PRESERVE,set_verbosity=cmor.CMOR_NORMAL,exit_control=cmor.CMOR_NORMAL)
+    Where:
+    path:                  Alternate directory where to find tables if not in current directory
+    netcdf_file_action:    What to do when opening the netcdf file, valid options are:
+                           CMOR_PRESERVE, CMOR_APPEND, CMOR_REPLACE, CMOR_PRESERVE_4, CMOR_APPEND_4, CMOR_REPLACE_4, CMOR_PRESERVE_3, CMOR_APPEND_3 or CMOR_REPLACE_3
+                           The _3 means netcdf will be created in the old NetCDF3 format (no compression nor chunking), _4 means use NetCDF4 classic format. No _ is equivalent to _3
+
+    set_verbosity:         CMOR_QUIET or CMOR_NORMAL
+    exit_control:          CMOR_EXIT_ON_WARNING, CMOR_EXIT_ON_MAJOR, CMOR_NORMAL
+    create_subdirectories: 1 to create subdirectories structure, 0 to dump files directly where cmor_dataset tells to
+"""
+    if not isinstance(exit_control,int) or not exit_control in [ cmor_const.CMOR_EXIT_ON_WARNING, cmor_const.CMOR_EXIT_ON_MAJOR, cmor_const.CMOR_NORMAL]:
+        raise Exception, "exit_control must an integer valid values are: CMOR_EXIT_ON_WARNING, CMOR_EXIT_ON_MAJOR, CMOR_NORMAL"
+
+    if not isinstance(netcdf_file_action,int) or not netcdf_file_action in [ cmor_const.CMOR_PRESERVE, cmor_const.CMOR_APPEND, cmor_const.CMOR_REPLACE, cmor_const.CMOR_PRESERVE_3, cmor_const.CMOR_APPEND_3, cmor_const.CMOR_REPLACE_3,cmor_const.CMOR_PRESERVE_4, cmor_const.CMOR_APPEND_4, cmor_const.CMOR_REPLACE_4 ]:
+        raise Exception, "netcdf_file_action must be an integer. Valid values are: CMOR_PRESERVE, CMOR_APPEND, CMOR_REPLACE, CMOR_PRESERVE_3, CMOR_APPEND_3 or CMOR_REPLACE_3, CMOR_PRESERVE_4, CMOR_APPEND_4 or CMOR_REPLACE_4"
+
+    if not isinstance(set_verbosity,int) or not set_verbosity in [ cmor_const.CMOR_QUIET, cmor_const.CMOR_NORMAL]:
+        raise Exception, "set_verbosity must an integer valid values are: CMOR_QUIET, CMOR_NORMAL"
+
+    if not isinstance(inpath,str) and not os.path.exists(inpath):
+        raise Exception, "path must be a Valid path"
+    if logfile is None:
+        logfile = ""
+
+    if not create_subdirectories in [0,1]:
+        raise Exception, "create_subdirectories must be 0 or 1"
+    return _cmor.setup(inpath,netcdf_file_action,set_verbosity,exit_control,logfile,create_subdirectories)
+
+def load_table(table):
+    """ loads a cmor table
+    Usage:
+    load_table(table)
+    """
+    if not isinstance(table,str):
+        raise Exception, "Error, must pass a string"
+##     if not os.path.exists(table):
+##         raise Exception, "Error, the table you specified (%s) does not exists" % table
+    return _cmor.load_table(table)
+
+def dataset(experiment_id,institution,source,calendar,outpath='.',realization=1,contact="",history="",comment="",references="",leap_year=0,leap_month=0,month_lengths=None,model_id="",forcing="",initialization_method=None,physics_version=None,institute_id="",parent_experiment_id="",branch_time=None):
+    """ Initialize a cmor dataset 
+    Usage:
+    dataset(experiment_id,institution,source,outpath='.',calendar=None,realization=None,contact=None,history="",comment="",references="",leap_year=None,leap_month=None,month_lengths=None,model_id="",forcing="",initialization_method=None,physics_version=None,institute_id="",parent_experiment_id="",branch_time=None)
+    """
+
+    if isinstance(calendar,int):
+        if has_cdtime: # put this in a try loop in case cdtime is not available on the system 
+            if calendar == cdtime.Calendar360:
+                calendar = "360_day"
+            elif calendar == cdtime.ClimCalendar:
+                calendar = "clim"
+            elif calendar == cdtime.DefaultCalendar:
+                calendar = "proleptic_gregorian"
+            elif calendar == cdtime.GregorianCalendar:
+                calendar = "gregorian"
+            elif calendar == cdtime.JulianCalendar:
+                calendar = "julian"
+            elif calendar == cdtime.MixedCalendar:
+                calendar= "mixed"
+            elif calendar == cdtime.NoLeapCalendar:
+                calendar = "noleap"
+            elif calendar == cdtime.StandardCalendar:
+                calendar = "standard"
+            elif calendar == cdtime.ClimLeapCalendar:
+                calendar = "climleap"
+    elif calendar is None:
+        calendar ="none"
+                
+    for st in [outpath,experiment_id,institution,source,contact,history,comment,references,model_id,forcing,institute_id,parent_experiment_id]:
+        if not isinstance(st,str):
+            for o in dir():
+                if locals()[o] is st:
+                    raise Exception, "Error argument %s must be a string" % o
+
+    calendar = calendar.lower()
+    
+    for i in [realization,leap_year,leap_month]:
+        if not isinstance(i,int):
+            for o in dir():
+                if locals()[o] is i:
+                    raise Exception, "Error argument %s must be an integer" % o
+    if isinstance(month_lengths,(list,tuple)):
+        month_lengths = numpy.array(month_lengths)
+    elif has_cdms2 and cdms2.isVariable(month_lengths):
+        month_lengths = month_lengths.filled()
+    elif isinstance(month_lengths,(numpy.ma.core.MaskedArray)):
+        month_lengths = month_lengths.filled()
+    elif has_oldma and isinstance(month_lengths,numpy.oldnumeric.ma.MaskedArray):
+        month_lengths = month_lengths.filled()
+        
+    if isinstance(month_lengths,numpy.ndarray):
+        if not numpy.rank(month_lengths)==1:
+            raise Exception, "Error month_lengths must be 1D"
+        if len(month_lengths)!=12:
+            raise Exception, "Error month_lengths must have 12 elements exactly"
+        months_lengths = numpy.ascontiguousarray(month_lengths)
+    elif month_lengths is not None:
+        raise Exception, "Error month_lengths must be a 12 elts array or list"
+    if initialization_method is not None:
+        if not isinstance(initialization_method,int):
+            raise Exception, "initialization_method must be an int"
+    else:
+        initialization_method=0
+    if physics_version is not None:
+        if not isinstance(physics_version,int):
+            raise Exception, "physics_version must be an int"
+    else:
+        physics_version=0
+
+    if branch_time is not None:
+        if not isinstance(branch_time,(float,int,numpy.float,numpy.float32,numpy.int,numpy.int32)):
+            raise Exception,"branch_time must be a float"
+        else:
+            branch_time=float(branch_time)
+
+    return _cmor.dataset(outpath,experiment_id,institution,source,calendar,realization,contact,history,comment,references,leap_year,leap_month,month_lengths,model_id,forcing,initialization_method,physics_version,institute_id,parent_experiment_id,branch_time)
+
+def set_table(table):
+    if not isinstance(table,int):
+        raise Exception, "error you need to pass and integer as the table id"
+    return _cmor.set_table(table)
+
+def close(var_id=None,file_name=False, preserved=False):
+    """ Close CMOR variables/file
+    Usage:
+      cmor.close(varid=None)
+    Where:
+      var_id: id of variable to closee, if passing None, means close every open ones.
+      [file_name] True/False (default False) if True: return name of the file just closed
+      [preserved] True/False (default close) if True: close the file but return a new var_id to write more data with this variable (into a new file)
+      """
+    if var_id is not None and not isinstance(var_id,int):
+        raise Exception, "Error var_id must be none or a integer"
+
+    if (preserved is False):
+        if (file_name is False):
+            return _cmor.close(var_id,0,0)
+        else:
+            return _cmor.close(var_id,1,0)
+    else:
+        if (file_name is False):
+            return _cmor.close(var_id,0,1)
+        else:
+            return _cmor.close(var_id,1,1)
+        
+
+def set_cur_dataset_attribute(name,value):
+    """Sets an attribute onto the current cmor dataset
+    Usage:
+      cmor.set_cur_dataset_attribute(name,value)
+    Where:
+      name: is the name of the attribute
+      value: is the value for this attribute
+    """
+    if value is None:
+        val=""
+    else:
+        val = str(value)
+    return _cmor.set_cur_dataset_attribute(name,val)
+
+def has_cur_dataset_attribute(name,value):
+    """determines if the current cmor dataset has an attribute
+    Usage:
+      cmor.het_cur_dataset_attribute(name)
+    Where:
+      name: is the name of the attribute
+    Returns True if the dataset has the attribute, False otherwise
+    """
+    test = _cmor.has_cur_dataset_attribute(name)
+    if test == 0 :
+        return True
+    else:
+        return False
+
+def get_cur_dataset_attribute(name):
+    """Gets an attribute onto the current cmor dataset
+    Usage:
+      cmor.get_cur_dataset_attribute(name)
+    Where:
+      name: is the name of the attribute
+    Returns none if attribute is non-existant
+    """
+    if has_cur_dataset_attribute(name):
+        return _cmor.get_cur_dataset_attribute(name)
+    else:
+        return None
+    
+    
+def create_output_path(varid):
+    """returns the output path where a variable would be stored, given a varid (as returned by a call to cmor.variable)
+    Usage:
+      path = create_output_path(var_id)
+    Where:
+      var_id : id to variable as returned by a call to variable(...)
+    Returns: the path where the file will be created
+    """
+    return _cmor.create_output_path(varid)
diff --git a/Lib/table_generator.py b/Lib/table_generator.py
new file mode 100644
index 0000000..7500904
--- /dev/null
+++ b/Lib/table_generator.py
@@ -0,0 +1,415 @@
+import sys,time,os,genutil
+
+
+prefix = "CMIP5"
+
+general = """cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   %s  ! project id
+table_date:   %s ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+""" % (prefix,time.strftime("%d %B %Y"))
+
+
+
+#realm:	      %s
+#table_id:     Table %s    ! table id
+
+
+axis_tmpl  = """
+!============
+axis_entry: %(CMOR dimension)
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    %(standard name)
+units:            %(units)
+axis:             %(axis)             ! X, Y, Z, T (default: undeclared)
+positive:         %(positive)         ! up or down (default: undeclared)
+long_name:        %(long name)
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         %(output dimension name)
+valid_min:        %(valid_min)         
+valid_max:        %(valid_max) 
+stored_direction: %(stored direction)
+formula:          %(formula)
+z_factors:        %(z_factors)
+z_bounds_factors: %(z_factor_bounds)
+tolerance:        %(tol_on_requests: variance from requested values that is tolerated)
+type:             %(type)
+requested:        %(requested)        ! space-separated list of requested coordinates 
+requested_bounds: %(bounds_ requested) ! space-separated list of requested coordinate bounds
+value:            %(value)            ! of scalar (singleton) dimension 
+bounds_values:    %(bounds _values)    ! of scalar (singleton) dimension bounds
+must_have_bounds: %(bounds?)
+index_only:       %(index axis?)
+climatology:      %(climatology)
+coords_attrib:    %(coords_attrib)
+!----------------------------------
+!
+"""
+
+
+var_tmpl = """!============
+variable_entry:    %(CMOR variable name)
+!============
+modeling_realm:    %(realm)
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     %(standard name)
+units:             %(unformatted units)
+cell_methods:      %(cell_methods)
+cell_measures:      %(cell_measures)
+long_name:         %(long name)
+comment:           %(comment)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        %(CMOR dimensions)
+out_name:          %(output variable name)
+type:              %(type)
+positive:          %(positive)
+valid_min:         %(valid min)
+valid_max:         %(valid max)
+ok_min_mean_abs:   %(mean absolute min)
+ok_max_mean_abs:   %(mean absolute max)
+flag_values:       %(flag values)
+flag_meanings:     %(flag meaning)
+!----------------------------------
+!
+"""
+
+def process_a_line(line):
+    #print line
+    if line.find("usiiiiually,")>-1:
+        debug = True
+        print
+        print 'NEW STUFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
+        print
+    else:
+        debug=False
+    line=line.replace("\r\n","\n") # dos character 
+    line = line.replace('""','"$$$')
+    sps = line .split(",")
+    sp=[]
+    st=""
+    while (len(sps)>0):
+        s = sps.pop(0)
+        if debug:
+            print 's:',s
+        if len(s)>0 and s[0]=='"' and s[-1]!='"':
+            if debug: print 'inthere'
+            s=s[1:]
+            s2=sps.pop(0)
+            if debug: print 's2:',s2
+            while len(s2)==0 or s2[-1]!='"':
+                s = ','.join([s,s2])
+                #print sps
+                s2=sps.pop(0)
+            else:
+                s = ','.join([s,s2[:-1]])                
+        sp.append(s.replace("$$$",'"'))
+    return sp
+
+
+def process_template(tmpl,cnames,cols,voids={}):
+    F = genutil.StringConstructor(tmpl)
+
+    keys = F.keys()
+    match = 0
+    for c in cnames:
+        if c in keys:
+            match+=1
+            indx = cnames.index(c)
+##             print ' matched at %i' % indx ,
+            if indx<len(cols):
+                val = cols[indx]
+            else:
+                val = ""
+            if  val.strip()=='time2':
+                setattr(F,"climatology","yes")
+                if "climatology" in keys: keys.remove("climatology")
+            if val.strip()!="":
+                setattr(F,c,val)
+                keys.remove(c)
+##                 print
+##             else:
+##                 print ' but empty'
+##         else:
+##             print
+    if "CMOR dimension" in keys:
+        raise "crap"
+    for k in keys:
+        setattr(F,k,"!CRAP WE NEED TO REMOVE THAT LINE")
+
+    ## Now generates
+    out = F()
+    sp = out.split("\n")
+    lines = []
+    for l in sp:
+        if l.find("!CRAP WE NEED TO REMOVE THAT LINE")>-1:
+            continue
+        lines.append(l)
+    out = "\n".join(lines)
+            
+##     print 'We got: %i matches' % match
+    # fixes Karl input bug
+    out = out.replace("..",".")
+
+    #Ok now check the void thing
+    for kw in voids.keys():
+        v = getattr(F,kw,"we keep").strip()
+        vals = voids[kw]
+        if not isinstance(vals,(list,tuple)):
+            vals = [vals,]
+        for V in vals:
+            if V == v:
+                out = ""
+    return out
+
+def create_table_header(tbnm, table_file, dims_file, fqcy):
+    #First of All create the header
+    fnm = "Tables/" + prefix + '_'+tbnm
+    fo = open(fnm,'w')
+    print >> fo, "table_id: Table %s" % tbnm
+
+    realm = None
+    if tbnm[0]=='O':
+        realm = "ocean"
+    elif tbnm[0]=='A':
+        realm = 'atmos'
+    elif tbnm[0]=='L':
+        realm = 'land'
+    else:
+        realm = "atmos"
+
+
+    print >> fo, "modeling_realm: %s\n" % realm
+    print >> fo, "frequency: %s\n" % fqcy
+    print >> fo, general
+
+    # looking for approx interval, ASSUMING UNITS ARE IN DAYS SINCE
+    if tbnm.find("mon")>-1:
+        interval = 30.
+    elif tbnm.lower().find('clim')>-1:
+        interval = 30.
+    elif tbnm.lower().find('aero')>-1:
+        interval = 30.
+    elif tbnm.lower().find('yr')>-1:
+        interval = 365.
+    elif tbnm.lower().find('da')>-1:
+        interval = 1.
+    elif tbnm.find("hr")==1:
+        interval = float(tbnm[0])/24.
+    elif tbnm.find("min")>-1:
+        interval = float(tbnm[2:tbnm.find("min")])/1440.
+    else:
+        interval = 0.
+    print >> fo, """approx_interval:  %f     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.""" % interval
+
+    D = open(dims_file)
+    dlines = D.readlines()[1:]
+    i=0
+    while dlines[i].strip()=="":
+        i+=1
+    dlines=dlines[i:]
+    cnms = dlines[0].split(',')
+    for i in  range(len(cnms)):
+        cnms[i]=cnms[i].strip()
+
+
+    addLines = False
+    for l in dlines[1:]:
+        sp = process_a_line(l)
+        foundnm = False
+        for snm in sp[0].split(","):
+            if tbnm == snm.strip():
+                foundnm  = True
+        if foundnm:
+            if l.find("alevel")>-1:
+                addLines = True
+                zlevel_name = 'alevel'
+                file_add = 'Tables_csv/add_dims.txt'
+            elif l.find("olevel")>-1:
+                addLines = True
+                zlevel_name = 'olevel'
+                file_add = 'Tables_csv/add_dims2.txt'
+            else:
+                print >> fo, process_template(axis_tmpl,cnms,sp)
+    if addLines is True:
+        print 'adding:',file_add,'to',tbnm
+        tmpf=open(file_add)
+        lns=tmpf.readlines()
+        tmpf.close()
+        if file_add == 'Tables_csv/add_dims.txt':
+            if not tbnm in ['aero','cfMon']:
+                lns=lns[:-20]
+        lns=''.join(lns)
+        lns=lns.replace("zlevel",zlevel_name)
+        print >> fo, lns
+
+    return fo
+
+
+def create_table(table_file, dims_file):
+    tables = {}
+    foundnm= False
+    D = open(table_file)
+    dlines = D.readlines()
+    ivar = -2
+    if len(dlines)==1:
+        dlines = dlines[0].split('\r')
+    #This bit insert a table
+    dlines2=[]
+    for i in range(len(dlines)):
+        if dlines[i].find("include Amon 2D")>-1:
+            f=open("Tables_csv/amon_2D.csv")
+            add_lines = f.readlines()
+            if table_file[-11:-4] in ['cfsites','v/cf3hr']:
+                tmplines=[]
+                for aline in add_lines:
+                    a_line =aline.strip()
+                    if len(a_line)==0:
+                        continue
+                    if a_line[-1]!=',' : a_line=a_line+','
+                    sp = process_a_line(a_line)
+                    ## for i2 in range(len(sp)):
+                    ##     if sp[i2]=='tasmax' : print i2,sp[i2]
+                    if len(sp)>15 and 'time' in sp[16]:
+                        sp[16]=sp[16].replace('time','time1')
+                        if table_file[-11:-4]=='cfsites':
+                            sp[16]=sp[16].replace("longitude latitude","site")
+                        ## print 'Replaced to:',sp[16]
+                    for i in range(len(sp)):
+                        if sp[i].find(",")>-1:
+                            sp[i]='"%s"' % sp[i]
+                    myline = ','.join(sp)
+                    myline = myline.replace("time: mean","time: point")
+                    if len(sp)>4 and sp[5] in ['tasmin','tasmax']:
+                        print 'Skipping tasmin/max'
+                        pass
+                    else:
+                        tmplines.append(myline)
+                add_lines = tmplines
+            dlines2=dlines2+add_lines
+        elif dlines[i].find("include Oyr")>-1:
+            f=open("Tables_csv/oyr_tracer.csv")
+            dlines2=dlines2+f.readlines()
+        else:
+            dlines2.append(dlines[i])
+    dlines=dlines2
+    for l in dlines:
+        sp = process_a_line(l)
+        if 0<=sp[0].find("CMOR Table")<=1 and foundnm == False: # line that will give us the table name
+            i=1
+            while sp[i].strip()=="":
+                i+=1
+            tbnm = sp[i].strip()
+            fqcy = sp[i+1].strip()
+            foundnm = True
+        if sp[0] == 'priority':
+            cnms = sp
+            for i in  range(len(cnms)):
+                cnms[i]=cnms[i].strip()
+            ivar = cnms.index("CMOR variable name")
+            continue
+        if ivar!=-2 and len(sp)>ivar and sp[ivar].strip()!="":
+            if tbnm in tables.keys():
+                fo = tables[tbnm]
+            else: # New table
+                fo = create_table_header(tbnm,table_file,dims_file,fqcy)
+                tables[tbnm]=fo
+            print >> fo, process_template(var_tmpl,cnms,sp,{'CMOR variable name':['?','0']})
+    print 'Created tables:',tables.keys()
+                
+        
+
+    
+
+if __name__== "__main__" :
+    if len(sys.argv)>2:
+        dims_table = sys.argv[2]
+    else:
+        dims_table = 'Tables_csv/dims.csv'
+
+    if len(sys.argv)>1:
+        print sys.argv
+        create_table(sys.argv[1],dims_table)
+    else:
+        tables_nms = """Tables_csv/3hr.csv      Tables_csv/amon.csv     Tables_csv/cfMon.csv    Tables_csv/oclim.csv
+Tables_csv/6hrLev.csv   Tables_csv/cfsites.csv  Tables_csv/cfOff.csv    Tables_csv/fx.csv       Tables_csv/olmon.csv
+Tables_csv/6hrPlev.csv  Tables_csv/cf3hr.csv    Tables_csv/llmon.csv    Tables_csv/omon.csv
+Tables_csv/aero.csv     Tables_csv/cfDa.csv     Tables_csv/da.csv       Tables_csv/lmon.csv     Tables_csv/oyr.csv
+""".split()
+        for nm in tables_nms:
+            print 'Processing:',nm
+            create_table(nm,dims_table)
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..9e9e4dd
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,225 @@
+#!/usr/bin/env sh
+FC=@FC@
+CPPFLAGS_USER=""
+FFLAGS_USER="-fPIC"
+#MODULE_SUFFIX="mod"
+PREFIX=@prefix@
+FCFLAGS=@FCFLAGS@
+PYTHONEXEC=@PYTHONEXEC@
+NO_COLOR2=\x1b[0m
+OK_COLOR2=\x1b[2;34m
+NO_COLOR=${@NO_COLOR@}
+OK_COLOR=${@OK_COLOR@}
+
+
+# Library name
+LIBNAME = libcmor.a
+
+# Library sources
+#LIBSOURCES = Src/cmor.c Src/cmor_variables.c Src/cmor_axes.c Src/cmor_tables.c Src/cmor_grids.c Src/cdTime/cdTimeConv.c Src/cdTime/cdUtil.c Src/cdTime/timeConv.c Src/cdTime/timeArith.c
+LIBSOURCES = @LIBSOURCES@
+LIBFSOURCES = @LIBFSOURCES@
+
+LIBFILES = @LIBFILES@
+
+#Include Files
+INCFILES = @INCFILES@
+
+# Temporary Files
+TMPFILES = *~ $(LIBFILES) *.mod a.out *.stb Test/IPCC_Fourth_Assessment *.LOG* *.dSYM Test/IPCC Test/CMIP5 CMIP5
+DISTFILES = libcmor.a
+DEPEND= makedepend -c @DEBUG@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@
+
+all:    cmor
+	@echo
+depend:  $(LIBSOURCES)
+	${DEPEND}  $(LIBSOURCES)
+cmor.o: Src/cmor.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor.c
+cmor_variables.o: Src/cmor_variables.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor_variables.c
+cmor_axes.o: Src/cmor_axes.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor_axes.c
+cmor_tables.o: Src/cmor_tables.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor_tables.c
+cmor_grids.o: Src/cmor_grids.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor_grids.c
+cmor_md5.o: Src/cmor_md5.c include/cmor.h include/cmor_func_def.h include/cmor_md5.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor_md5.c
+cmor_cfortran_interface.o: Src/cmor_cfortran_interface.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cmor_cfortran_interface.c
+cdTimeConv.o: Src/cdTime/cdTimeConv.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cdTime/cdTimeConv.c
+cdUtil.o: Src/cdTime/cdUtil.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cdTime/cdUtil.c
+timeConv.o: Src/cdTime/timeConv.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cdTime/timeConv.c
+timeArith.o:Src/cdTime/timeArith.c include/cmor.h include/cmor_func_def.h
+	@CC@ -c @DEBUG@ @MACROS@ @CFLAGS@  @NCCFLAGS@ @UDUNITS2FLAGS@ @UUIDFLAGS@ @ZFLAGS@ Src/cdTime/timeArith.c
+cmor_fortran_interface.o: Src/cmor_fortran_interface.f90
+	@FC@ -c @FCFLAGS@ @DEBUG@ @MACROS@ Src/cmor_fortran_interface.f90
+cmor:  $(LIBFILES) @MAKEDEPPYTHON@
+	@ar crv $(LIBNAME) $(LIBFILES) 
+	@ranlib $(LIBNAME)
+clean:
+	@echo "Cleaning [$(WHEREAMI)] ..."
+	@rm -rf $(TMPFILES)
+distclean: clean
+	@echo "Completely cleaning [$(WHEREAMI)]..."
+	@rm -f $(DISTFILES)
+install: cmor
+	mkdir -p @prefix@/lib
+	mkdir -p @prefix@/include
+	mkdir -p @prefix@/include/cdTime
+	mkdir -p @prefix@/include/cdTime/cdunifpp
+	cp -p $(LIBNAME) @prefix@/lib
+	cp -pr include/*.h @MODFILES@ @prefix@/include
+	cp -pr include/cdTime/*.h @prefix@/include/cdTime
+	cp -pr include/cdTime/cdunifpp/*.h @prefix@/include/cdTime/cdunifpp
+uninstall: distclean 
+	rm @prefix@/lib/$(LIBNAME)    
+	cd @prefix@ ; rm $(INCFILES)  
+backup: clean
+	@echo "Creating full backup tar file..."
+	@(cd ..; \
+	@TGZNAME=$(TGZDIR)/cmor_`$(TIMESTAMP)`_full.tgz; \
+	@tar cfz $$TGZNAME Cmor; \
+	@touch $(TIMESTAMPDIR)/cmor_`$(TIMESTAMP)`_full.time; \
+	@echo "Full backup tar file created : $$TGZNAME")
+test:  cmor test_C @TEST_FORTRAN@ @MAKETESTPYTHON@
+	@echo "All C and Fortran Test passed successfully"
+test_C: cmor 
+	@rm -f ./ipcc_test_code ; @CC@ @CFLAGS@ @CPPFLAGS@  Test/ipcc_test_code.c -L at prefix@/lib -I at prefix@/include  -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ -o ipcc_test_code  @VERB@; ./ipcc_test_code @VERB@
+	@rm -f test_grid ; @CC@ @CFLAGS@ @CPPFLAGS@  Test/test_grid.c -L at prefix@/lib -I at prefix@/include  -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ -o test_grid @VERB@; ./test_grid @VERB@;
+	@rm -f test_lots_of_variables ; @CC@ @CFLAGS@ @CPPFLAGS@  Test/test_lots_of_variables.c -L at prefix@/lib -I at prefix@/include  -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ -o test_lots_of_variables @VERB@; ./test_lots_of_variables @VERB@;
+python:
+	@echo "Building Python interface"
+	@${PYTHONEXEC} setup.py install @CDATPREFIX@
+test_a_python:
+	@echo "${OK_COLOR}Testing ${TEST_NAME} ${NO_COLOR}"
+	${PYTHONEXEC} ${TEST_NAME} @VERB@
+test_python: python
+	@env TEST_NAME=Test/test_python_direct_calls.py make test_a_python
+	@env TEST_NAME=Test/test_python_user_interface_00.py make test_a_python
+	@env TEST_NAME=Test/test_python_user_interface_01.py make test_a_python
+	@env TEST_NAME=Test/test_python_user_interface_03.py make test_a_python
+	@env TEST_NAME=Test/test_python_common.py make test_a_python
+	@env TEST_NAME=Test/cmor_speed_and_compression.py make test_a_python
+	@env TEST_NAME=Test/cmor_speed_and_compression_01.py make test_a_python
+#	@env TEST_NAME=Test/cmor_speed_and_compression_02.py make test_a_python
+	@env TEST_NAME=Test/test_compression.py make test_a_python
+	@env TEST_NAME=Test/test_python_appending.py make test_a_python
+	@env TEST_NAME=Test/test_python_bounds_request.py make test_a_python
+	@env TEST_NAME=Test/test_python_new_tables.py make test_a_python
+#	@env TEST_NAME=Test/test_python_index_coord.py make test_a_python
+	@env TEST_NAME=Test/test_python_jamie.py make test_a_python
+	@env TEST_NAME=Test/test_python_jamie_2.py make test_a_python
+	@env TEST_NAME=Test/test_python_jamie_3.py make test_a_python
+	@env TEST_NAME=Test/test_python_jamie_4.py make test_a_python
+	@env TEST_NAME=Test/test_python_jamie_6.py make test_a_python
+	@env TEST_NAME=Test/test_python_memory_check.py make test_a_python
+	@env TEST_NAME=Test/test_python_open_close_cmor_multiple.py make test_a_python
+	@env TEST_NAME=Test/test_python_jamie_7.py make test_a_python
+	@env TEST_NAME=Test/test_python_joerg_1.py make test_a_python
+	@env TEST_NAME=Test/test_python_joerg_2.py make test_a_python
+	@env TEST_NAME=Test/test_python_joerg_3.py make test_a_python
+	@env TEST_NAME=Test/test_python_YYYMMDDHH_exp_fmt.py make test_a_python
+	@env TEST_NAME=Test/test_python_region.py make test_a_python
+
+test_case:
+	@echo "${OK_COLOR}Testing: "${TEST_NAME}" with input file: ${INPUT_FILE}${NO_COLOR}"
+	@rm -f ./${TEST_NAME} 2>/dev/null ; @FC@ @FCFLAGS@ @DEBUG@  Test/${TEST_NAME}.f90 -L at prefix@/lib -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ @ZFLAGS@ @ZLDFLAGS@ -o ${TEST_NAME} ;
+	@./${TEST_NAME} @VERB@ < ${INPUT_FILE} ;
+	@ rm ./${TEST_NAME}
+ifeq (@MAKEDEPPYTHON@,python)
+	@env TEST_NAME=Test/check_results.py ${TEST_NAME} make test_a_python
+endif
+test_case_old_cmor_tables:
+	@echo "Testing: "${TEST_NAME}" with input file: "${INPUT_FILE}
+	@rm -f ./${TEST_NAME} 2>/dev/null ; @FC@ @FCFLAGS@ @DEBUG@  Test/old_cmor_tables/${TEST_NAME}.f90 -L at prefix@/lib -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ @ZFLAGS@ @ZLDFLAGS@ -o ${TEST_NAME} ;
+	@./${TEST_NAME} @VERB@ < ${INPUT_FILE} ;
+	@ rm ./${TEST_NAME}
+ifeq (@MAKEDEPPYTHON@,python)
+	@env TEST_NAME=Test/check_results.py old_cmor_tables_${TEST_NAME} make test_a_python
+endif
+test_fortran_old_cmor_tables: cmor
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/tas_3D_noreorder.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/3D_txy.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/3D_txy_split_lon.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/3D_xty_split_lon.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/tas_3D_noreorder.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/3D_txy.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/3D_txy_split_lon.input" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/3D_xty_split_lon.input" make test_case_old_cmor_tables
+	@env TEST_NAME="karls_test" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test1" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test2" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test3" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test4" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="main_prog" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_any_from_asc_i" INPUT_FILE="Test/tas_mytest_3d_i.input" make test_case_old_cmor_tables
+	@env TEST_NAME="mytest_4d_r" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="rewrite_harvardf_data" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_3h" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_dimensionless" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_fortran_example_00" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_fortran_example_01" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_station_data" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_region" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_sigma" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_singleton" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="mytest_4d_r_big_array" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="mytest_4d_d_big_array_2" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="mytest_4d_d_big_array_3" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="mytest_4d_d_big_array_4" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="mytest_4d_d_big_array_5" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="climatology_test_code" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_lots_of_variables" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_shrt_exp_nm_set_att_initi" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+	@env TEST_NAME="test_sophie" INPUT_FILE="Test/noinput" make test_case_old_cmor_tables
+test_fortran: cmor
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/tas_3D_noreorder.input" make test_case
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/3D_txy.input" make test_case
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/3D_txy_split_lon.input" make test_case
+	@env TEST_NAME="test_any_from_asc" INPUT_FILE="Test/3D_xty_split_lon.input" make test_case
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/tas_3D_noreorder.input" make test_case
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/3D_txy.input" make test_case
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/3D_txy_split_lon.input" make test_case
+	@env TEST_NAME="test_any_from_asc_d" INPUT_FILE="Test/3D_xty_split_lon.input" make test_case
+	@env TEST_NAME="karls_test" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test1" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test2" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test3" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test4" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="main_prog" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_any_from_asc_i" INPUT_FILE="Test/tas_mytest_3d_i.input" make test_case
+	@env TEST_NAME="mytest_4d_r" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="rewrite_harvardf_data" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_3h" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_dimensionless" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_fortran_example_00" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_fortran_example_01" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_station_data" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_cmor_grid_alejandro" INPUT_FILE="Test/alejandro.txt" make test_case
+	@env TEST_NAME="test_cmor_grid_alejandro" INPUT_FILE="Test/alejandro_1.txt" make test_case
+	@env TEST_NAME="test_cmor_grid_alejandro" INPUT_FILE="Test/alejandro_2.txt" make test_case
+	@env TEST_NAME="test_region" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_sigma" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_singleton" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="mytest_4d_r_big_array" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="mytest_4d_d_big_array_2" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="mytest_4d_d_big_array_3" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="mytest_4d_d_big_array_4" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="mytest_4d_d_big_array_5" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="climatology_test_code" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_lots_of_variables" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_shrt_exp_nm_set_att_initi" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_sophie" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="ipcc_test_code" INPUT_FILE="Test/noinput" make test_case
+atest: cmor
+#	@env TEST_NAME="mytest_4d_d_big_array_2" INPUT_FILE="Test/noinput" make test_case
+	@env TEST_NAME="test_lots_of_variables" INPUT_FILE="Test/noinput" make test_case
+#	@env TEST_NAME="wegner_test" INPUT_FILE="Test/noinput" make test_case
+
+
+
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
new file mode 100644
index 0000000..dc013ac
--- /dev/null
+++ b/RELEASE-NOTES
@@ -0,0 +1,114 @@
+2010-04-27 : updated examples to reflect new required things
+2010-04-27 : colored Makefile output for fortran testing, makes it eaiser to see what's being tested
+2010-04-27 : API changes for Jamie, close_variable can now preserve a variable and redefine it for later use (new file) by user. See doc and test_python_max_variables_2.py for details.
+2010-04-27 : when creating new variable, looks for the first available in the list instead of always adding one. This helps preventing users to run into "maximum number of variables" when opeing/closing a lot of files. See test_python_max_variables.py for details.
+2010-04-27 : model_id must now match begining of source if CMIP5
+2010-04-27 : institute_id is now required in tables
+2010-04-27 : changed history from "reverted axes" to "inverted axis"
+2010-04-27 : "hyphenized model_id has nor more "-" at the end
+2010-04-27 : comment: original_table_comment changed to [project_id]_table_comment where [project_id] is what the table specifies
+2010-04-27 : "singleton" replaced with "scalr" in history output
+2010-04-27 : zfactor_bnds are now reverted if needed. 
+2010-04-27 : "height" scalar dimension is now defined in the file BEFORE the actual variable (so it looks better on an ncdump)
+2010-04-27 : "converted type to" was written only to the the last variable (multiple times) instead of the correct variable(s)
+2010-04-21 : fixed appendix in doc to reflect newest values of include files
+2010-04-21 : fixed ippc_test_code.f90 that somehow stayed CMOR1 for the most part
+2010-04-15 : reverted axes did not result in flipping data!
+2010-04-02 : updated all examples FORTRAN, C and Python to run with newer tables
+2010-04-02 : allowed user to pass 1D bounds for time in cmor.write in Python, automagically converts to 2D
+2010-04-02 : updated tables
+2010-04-02 : contact is now required (that might change...)
+2010-04-02 : removed a test that was wrong and was allowing to define variable with wrong dimension (as long as axis (T) attribute matched)
+2010-04-01 : fixed associated_files attribute, the file names are now constructed correctly
+2010-03-31 : non_standard calendar must have "non_standard" as calendar name
+2010-03-25 : value of forcing is now checked and returns a CRITICAL_ERROR if wrong
+2010-03-25 : added parent_Experiment to list of required_global attributes in table
+2010-03-24 : fixed a bug when user was declaring multiple zfactor with same name
+2010-03-24 : fixed issue for alternate hybrid level being stored as infinite
+2010-03-22 : fixed configure with  Jamie's patch
+2010-03-22 : fixed alternate_hybrid_sigma code thx to Joerg for spotting the bug
+2010-03-22 : fixed a bug in definition of alternate_hybrid_sigma in tables
+2010-03-19 : fixed bug when starting from appending file, wasn't reseting the "last_time" written, this caused error when writing time values less than the default -999
+2010-03-19 : fixed configure to always add -lm since it wans't added in case of NetCDF3 libary use
+2010-03-16 : cleaned test_sophie , some int wasn't intialized
+2010-03-16 : Python interface now checks that the data passed somewhat check the expected shape (ignores 1 length dims)
+2010-03-12 : cleaned up configure, thx to Stephen Pascoe
+2010-03-12 : works for windows messed up files. But the md5 will probably come out wrong in that case
+2010-03-12 : tweaked grid table to remove some attributes
+2010-03-12 : check validity of parent_experiment_id
+2010-03-09 : Now accepting "generic" exp_ids ending with YYYYMMDDHH
+2010-03-09 : Storing md5 for Tables used by user, this should help detecting "tweaking of tables"
+2010-03-04 : 'rip' convention is now in place no matter if physics_method and _nitialisation_method' are passed or not
+2010-03-04 : file suffix no longer allowed for table made for cmor 2.0 and up
+2010-03-04 : associated_files attribute is now smart enough to use areacell/volumcell in agreement with cell_measures attribute
+2010-03-04 : appending to file fixed, was broken becasue of new DRS
+2010-03-04 : axis flipping no checks first vs last values not just first and second, in case we have a bunch of 0. to start.
+2010-02-23 : if a critical error happens during cmor_write or cmor_close_variable cleans up the file it was trying to produce
+2010-02-23 : cleans up cvalues if they were malloced
+2010-02-22 : links against either NetCDF4 or NetCDF3
+2010-02-19 : if ref variable defines "positive" and user does not pass it to cmor_variable, changed from WARNING to CRITICAL error[:]
+2010-02-19 : checking that "output" directory is indeed a directory and that you have read/write permissions to it
+2010-02-19 : added more experiement ids to tables
+2010-02-19 : added a note in install file about not mixing 32bit and 64bit compilers (mac transition to 10.6)
+2010-02-18 : fixed a bug with variable not being completely cleared after closing/setup.
+2010-02-18 : added possibility of "cell_measures" attribute.
+2010-02-18 : fixed MAJOR bug with grids, all reference tables were mixed, it was a miracle it even worked on examples.
+2010-02-17 : added Tables/CMIP5_grids file that contains "irregular" grid informations
+2010-02-17 : fixed bug when comparing exp_id with the ones in the table
+2010-02-17 : fixed "must have bounds check" was returning an error when user was sending time values via axis definition.
+2010-02-17 : do not store "positive" attribute on variables any longer.
+2010-02-16 : fixed tables_generator and updated tables
+2010-02-09 : cleaned-up table genrators add_dims2.txt
+2010-02-09 : for "region" (char) coordinates, now recognizes "coords_attrib" table definiton which defines name of the coordinate variable (still geo_'coord' if not defined)
+2010-02-01 : removed warnings in _cmormodule.c
+2010-02-01 : fixed error in cf3hr table
+2010-02-01 : fixed a small leak in python wrapper
+2010-02-01 : added some python example to the test suite
+2010-01-28 : fixed add_dims.txt (hybrid stuff) tables
+2010-01-28 : zfactors can now reference to axis values in formula
+2010-01-20 : fixed tables generator. Dims are not repeated anymore. fixed "climatology" keyword for dime time2
+2010-01-17 : add "eq" unit to udunits2 not convertible to anything, but won't die when reading in from tables
+2010-01-15 : newer table containing ocean sigma coords and some updtes from Karl
+2010-01-06 : added option to turn off coloring : --disable-color
+2010-01-05 : reset default values for shuffle/deflate/defalte_level to 0 (can be changed via table)
+2010-01-05 : fixed table generator to replace zlevel with appropriate alevel or olevel
+2010-01-05 : added colors to output to easily spot error and warnings
+2010-01-04 : added traceback through C calls
+2009-12-22 : model_id can now contain any character BUT they will be converted to "-" in directory structure
+2009-12-22 : exposed cmor_set_cur_dataset_attribute
+2009-12-22 : newer set of tables
+2009-12-22 : documented above changes into CMOR users guide
+2009-11-25 : updated acknowledgment
+2009-11-25 : history is not copied over multiple times any longer
+2009-11-25 : CMOR checker now checks for file directory structure
+2009-11-23 : updated documentation to reflect nvertices argument to Fortran and python. Also added this optional arg to python
+2009-11-23 : fixed bug for python wrapper that had the missing_value converted to the wrong type
+2009-11-22 : preserve mode fixed (can't know the name of the final file until closing, it now checks then as well)
+2009-11-22 : time varying grids are now accepted, see cmor_time_varying_grid_coordinate new function
+2009-11-22 : put back in use of nc-config at build time, which should allow for misc builds of netcdf
+2009-11-10 : allowed fortran to write fixed field (no time) w/o passing ntimes_passed=0
+2009-11-10 : now catching grid defined with time varying axes, not allowed at the moment
+2009-11-10 : fixed bug spoted by Kostas, when zfactor axis was created w/o bounds extra attributes were added to the previous dimension
+2009-11-10 : improved error messages when incompatible units in cmor_axes and cmor_variables
+2009-11-09 : updated python interface's keywords for cmor.variable: axes is now axis_ids and missing is now missing_value, this make it the same as C and Fortran versions
+2009-11-05 : unique id generated by uuid is now different fr each file (instead of being the same for every var generated nder a call to cmor_dataset). Appending to files will now change the tracking_id (uuid) number
+2009-11-05 : cmor_create_output_directory now return 1 in C only if the variable is a fixed frequency, no changes for Fortran and Python
+2009-11-05 : 30min frequency renamed "subhr"
+2009-11-05 : examples adapted to reflect new directory/names structure
+2009-11-05 : "output" directory added to directory structure between "project_id" and "institution_id" dirs, to prepare for future "derived" products
+2009-11-05 : Newer CMOR tables
+2009-11-05 : fixed fields are stored under realization "0" no matter which realization number is passed
+2009-11-05 : "fixed" is now "fx"
+2009-11-05 : removed area from cmor_grid, it is now supposed to be stored in a separate file
+2009-11-05 : updated "associated_files" to point to the gridspec/cellArea/cellVolume files + baseURL instead of "self"
+2009-10-20 : fixed paramters type for fortran they used to be real where integer was needed
+2009-10-15 : Patch from Jamie Kettleborough that fixes a bug in cmor.write that was returning incomplete bounds
+2009-08-25 : Fixed a bug with cell_method that would always add interval even if user did not pass it.
+2009-08-25 : Updated documenation of cmor_write to reflect the cell_method order difference in Fortran vs C/Python
+2009-08-25 : fixed a bug with python interface when passing 1 time slice bounds only.
+2009-08-25 : nc-config flags are different from 1 version unitl another, so until it is stabalized, commented code out
+2009-08-25 : Fixed a typo in doc of cmor_setup
+2009-08-24 : Tagged as release candidate 3
+2009-08-24 : Fixed a bug with realms being mangled with memory while construcitng path, added jamie's test for it
+2009-08-24 : Edited configure.ac to take advantage of nc-config if present
+2009-08-24 : Added this file RELEASES-NOTES
diff --git a/Src/_cmormodule.c b/Src/_cmormodule.c
new file mode 100644
index 0000000..51e2b43
--- /dev/null
+++ b/Src/_cmormodule.c
@@ -0,0 +1,781 @@
+#include <Python.h>
+#include "numpy/arrayobject.h"
+#include "cmor.h"
+
+static PyObject *
+  PyCMOR_get_original_shape(PyObject *self,PyObject *args)
+{
+  int tmp,i,shape_array[CMOR_MAX_DIMENSIONS],var_id,blank_time;
+  i=CMOR_MAX_DIMENSIONS;
+  PyObject *mylist;
+  if (!PyArg_ParseTuple(args,"ii",&var_id,&blank_time))
+    return NULL;
+  tmp = cmor_get_original_shape(&var_id,&shape_array[0],&i,blank_time);
+
+  mylist = PyList_New(0); 
+  for (i=0;i<CMOR_MAX_DIMENSIONS;i++) {
+    if (shape_array[i]!=-1) {
+      PyList_Append(mylist,PyInt_FromLong(shape_array[i]));
+    }
+  }
+  Py_INCREF(mylist);
+  return mylist;
+}
+
+static PyObject *
+  PyCMOR_create_output_path(PyObject *self,PyObject *args)
+{
+  char path[CMOR_MAX_STRING];
+  int var_id;
+  if (!PyArg_ParseTuple(args,"i",&var_id))
+    return NULL;
+  cmor_create_output_path(var_id,path);
+  return Py_BuildValue("s",path);
+}
+static PyObject *
+  PyCMOR_set_cur_dataset_attribute(PyObject *self,PyObject *args)
+{
+  char *name;
+  char *value;
+  int ierr;
+  if (!PyArg_ParseTuple(args,"ss",&name,&value))
+    return NULL;
+  ierr = cmor_set_cur_dataset_attribute(name,value,1);
+  if (ierr != 0 ) return NULL;
+  /* Return NULL Python Object */
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+static PyObject *
+  PyCMOR_get_cur_dataset_attribute(PyObject *self,PyObject *args)
+{
+  char *name;
+  char value[CMOR_MAX_STRING];
+  int ierr;
+  if (!PyArg_ParseTuple(args,"s",&name))
+    return NULL;
+  ierr = cmor_get_cur_dataset_attribute(name,value);
+  if (ierr != 0 ) return NULL;
+  return Py_BuildValue("s",value);
+}
+
+static PyObject *
+  PyCMOR_has_cur_dataset_attribute(PyObject *self,PyObject *args)
+{
+  char *name;
+  int ierr;
+  if (!PyArg_ParseTuple(args,"s",&name))
+    return NULL;
+  ierr = cmor_has_cur_dataset_attribute(name);
+  return Py_BuildValue("i",ierr);
+}
+
+static PyObject *
+  PyCMOR_setup(PyObject *self,PyObject *args)
+{
+  int mode,ierr,netcdf,verbosity,createsub;
+  char *path;
+  char *logfile;
+  if (!PyArg_ParseTuple(args,"siiisi",&path,&netcdf,&verbosity,&mode,&logfile,&createsub))
+    return NULL;
+  if (strcmp(logfile,"")==0) {
+    ierr = cmor_setup(path,&netcdf,&verbosity,&mode,NULL,&createsub);
+  }
+  else {
+    ierr = cmor_setup(path,&netcdf,&verbosity,&mode,logfile,&createsub);
+  }
+  if (ierr != 0 ) return NULL;
+  /* Return NULL Python Object */
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+
+static PyObject *
+  PyCMOR_getincvalues(PyObject *self,PyObject *args)
+{
+  char *att_name;
+
+  if (!PyArg_ParseTuple(args,"s",&att_name)) {
+    return NULL;
+  }
+  if (strcmp(att_name,"CMOR_MAX_STRING")==0) {
+    return Py_BuildValue("i",CMOR_MAX_STRING);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_ELEMENTS")==0) {
+    return Py_BuildValue("i",CMOR_MAX_ELEMENTS);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_AXES")==0) {
+    return Py_BuildValue("i",CMOR_MAX_AXES);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_VARIABLES")==0) {
+    return Py_BuildValue("i",CMOR_MAX_VARIABLES);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_GRIDS")==0) {
+    return Py_BuildValue("i",CMOR_MAX_GRIDS);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_DIMENSIONS")==0) {
+    return Py_BuildValue("i",CMOR_MAX_DIMENSIONS);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_ATTRIBUTES")==0) {
+    return Py_BuildValue("i",CMOR_MAX_ATTRIBUTES);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_ERRORS")==0) {
+    return Py_BuildValue("i",CMOR_MAX_ERRORS);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_TABLES")==0) {
+    return Py_BuildValue("i",CMOR_MAX_TABLES);
+  }
+  else if (strcmp(att_name,"CMOR_MAX_GRID_ATTRIBUTES")==0) {
+    return Py_BuildValue("i",CMOR_MAX_GRID_ATTRIBUTES);
+  }
+  else if (strcmp(att_name,"CMOR_QUIET")==0) {
+    return Py_BuildValue("i",CMOR_QUIET);
+  }
+  else if (strcmp(att_name,"CMOR_EXIT_ON_MAJOR")==0) {
+    return Py_BuildValue("i",CMOR_EXIT_ON_MAJOR);
+  }
+  else if (strcmp(att_name,"CMOR_EXIT")==0) {
+    return Py_BuildValue("i",CMOR_EXIT);
+  }
+  else if (strcmp(att_name,"CMOR_EXIT_ON_WARNING")==0) {
+    return Py_BuildValue("i",CMOR_EXIT_ON_WARNING);
+  }
+  else if (strcmp(att_name,"CMOR_VERSION_MAJOR")==0) {
+    return Py_BuildValue("i",CMOR_VERSION_MAJOR);
+  }
+  else if (strcmp(att_name,"CMOR_VERSION_MINOR")==0) {
+    return Py_BuildValue("i",CMOR_VERSION_MINOR);
+  }
+  else if (strcmp(att_name,"CMOR_VERSION_PATCH")==0) {
+    return Py_BuildValue("i",CMOR_VERSION_PATCH);
+  }
+  else if (strcmp(att_name,"CMOR_CF_VERSION_MAJOR")==0) {
+    return Py_BuildValue("i",CMOR_CF_VERSION_MAJOR);
+  }
+  else if (strcmp(att_name,"CMOR_CF_VERSION_MINOR")==0) {
+    return Py_BuildValue("i",CMOR_CF_VERSION_MINOR);
+  }
+  else if (strcmp(att_name,"CMOR_WARNING")==0) {
+    return Py_BuildValue("i",CMOR_WARNING);
+  }
+  else if (strcmp(att_name,"CMOR_NORMAL")==0) {
+    return Py_BuildValue("i",CMOR_NORMAL);
+  }
+  else if (strcmp(att_name,"CMOR_CRITICAL")==0) {
+    return Py_BuildValue("i",CMOR_CRITICAL);
+  }
+  else if (strcmp(att_name,"CMOR_N_VALID_CALS")==0) {
+    return Py_BuildValue("i",CMOR_N_VALID_CALS);
+  }
+  else if (strcmp(att_name,"CMOR_PRESERVE")==0) {
+    return Py_BuildValue("i",CMOR_PRESERVE);
+  }
+  else if (strcmp(att_name,"CMOR_APPEND")==0) {
+    return Py_BuildValue("i",CMOR_APPEND);
+  }
+  else if (strcmp(att_name,"CMOR_REPLACE")==0) {
+    return Py_BuildValue("i",CMOR_REPLACE);
+  }
+  else if (strcmp(att_name,"CMOR_PRESERVE_3")==0) {
+    return Py_BuildValue("i",CMOR_PRESERVE_3);
+  }
+  else if (strcmp(att_name,"CMOR_APPEND_3")==0) {
+    return Py_BuildValue("i",CMOR_APPEND_3);
+  }
+  else if (strcmp(att_name,"CMOR_REPLACE_3")==0) {
+    return Py_BuildValue("i",CMOR_REPLACE_3);
+  }
+  else if (strcmp(att_name,"CMOR_PRESERVE_4")==0) {
+    return Py_BuildValue("i",CMOR_PRESERVE_4);
+  }
+  else if (strcmp(att_name,"CMOR_APPEND_4")==0) {
+    return Py_BuildValue("i",CMOR_APPEND_4);
+  }
+  else if (strcmp(att_name,"CMOR_REPLACE_4")==0) {
+    return Py_BuildValue("i",CMOR_REPLACE_4);
+  }
+  else {
+    /* Return NULL Python Object */
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+}
+static PyObject *
+  PyCMOR_dataset(PyObject *self,PyObject *args)
+{
+  char *outpath; 
+  char *experiment_id; 
+  char *institution; 
+  char *source; 
+  char *calendar; 
+  int  realization; 
+  char *contact; 
+  char *history; 
+  char *comment; 
+  char *references; 	 
+  char *model_id; 	 
+  char *forcing; 
+  char *institute_id;	 
+  char *parent_exp_id;	 
+  int  leap_year; 
+  int  leap_month; 
+  int  *month_lengths;
+  int initialization_method;
+  int physics_version;
+  int ierr;
+  double *branch_time=NULL,bt;
+  PyObject *month_lengths_obj;
+  PyObject *branch_time_obj;
+  PyArrayObject *month_lengths_array_obj=NULL;
+
+  if (!PyArg_ParseTuple(args,"sssssissssiiOssiissO",&outpath,&experiment_id,&institution,&source,&calendar,&realization,&contact,&history,&comment,&references,&leap_year,&leap_month,&month_lengths_obj,&model_id,&forcing,&initialization_method,&physics_version,&institute_id,&parent_exp_id,&branch_time_obj))
+    return NULL;
+  if (month_lengths_obj == Py_None) {
+    month_lengths = NULL;
+  }
+  else {
+    month_lengths_array_obj =(PyArrayObject *) PyArray_ContiguousFromObject(month_lengths_obj,PyArray_NOTYPE,1,0);
+    month_lengths = (int *)month_lengths_array_obj->data;
+  }
+  if (branch_time_obj == Py_None) {
+    branch_time = NULL;
+  }
+  else {
+    bt = (double) PyFloat_AsDouble(branch_time_obj);
+    branch_time = &bt;
+  }
+    
+  ierr = cmor_dataset(outpath,experiment_id,institution,source,calendar,realization,contact,history,comment,references,leap_year,leap_month,month_lengths,model_id,forcing,initialization_method,physics_version,institute_id,parent_exp_id,branch_time);
+  if (month_lengths_array_obj!=NULL) {Py_DECREF(month_lengths_array_obj);}
+  if (ierr != 0 ) return NULL;
+  /* Return NULL Python Object */
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+
+static PyObject *
+  PyCMOR_load_table(PyObject *self,PyObject *args)
+{
+  int ierr,table_id;
+  char *table;
+  if (!PyArg_ParseTuple(args,"s",&table))
+    return NULL;
+  ierr = cmor_load_table(table,&table_id);
+  if (ierr != 0 ) {
+    return NULL;
+  }
+  return Py_BuildValue("i",table_id);
+}
+
+static PyObject *
+  PyCMOR_axis(PyObject *self,PyObject *args)
+{
+  int ierr,axis_id,n=0;
+  char *name; 
+  char *units; 
+  char *interval; 
+  int length;
+  char type;
+  void *coord_vals;
+  void *cell_bounds;
+  int cell_bounds_ndim;
+  char *tmpstr=NULL;
+  PyObject *coords_obj,*bounds_obj;
+  PyArrayObject *coords=NULL,*bounds=NULL;
+
+  /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"ssiOcOis",&name,&units,&length,&coords_obj,&type,&bounds_obj,&cell_bounds_ndim,&interval))
+    return NULL;
+
+  if (coords_obj == Py_None) {
+    coord_vals = NULL;
+  }
+  else {
+    coords =(PyArrayObject *) PyArray_ContiguousFromObject(coords_obj,PyArray_NOTYPE,1,0);
+
+    if (coords->nd!=1) {
+      printf("ok we need to pass contiguous flattened arrays only!\n");
+      return NULL;
+    }
+    
+    if (type!='c') {
+      coord_vals = (void *)coords->data;
+      n = cell_bounds_ndim;
+    }
+    else {
+      tmpstr=(char *)malloc(sizeof(char)*length*(cell_bounds_ndim+1));
+      for (ierr=0;ierr<length;ierr++) {
+	coord_vals = (void *)PyArray_GETPTR1(coords,ierr);
+	strncpy(&tmpstr[ierr*(cell_bounds_ndim+1)],coord_vals,cell_bounds_ndim);
+	tmpstr[ierr*(cell_bounds_ndim+1)+cell_bounds_ndim]='\0';
+      }
+      coord_vals=&tmpstr[0];
+      n = cell_bounds_ndim + 1;
+      for (ierr=0;ierr<length;ierr++) {
+      }
+    }
+  }
+
+  if (bounds_obj == Py_None) {
+    cell_bounds = NULL;
+  }
+  else {
+    bounds =(PyArrayObject *) PyArray_ContiguousFromObject(bounds_obj,PyArray_NOTYPE,1,0);
+    if (bounds->nd!=1) {
+      printf("ok we need to pass contiguous flattened arrays only!\n");
+      return NULL;
+    }
+    cell_bounds = (void *)bounds->data;
+  }
+  
+  ierr = cmor_axis(&axis_id,name,units,length,coord_vals,type,cell_bounds,n,interval);
+
+
+  if (coords!=NULL) {Py_DECREF(coords);}
+  if (bounds!=NULL) {Py_DECREF(bounds);}
+
+  if (ierr != 0 ) return NULL;
+
+  if (type=='c') {
+    free(tmpstr);
+  }
+
+
+  return Py_BuildValue("i",axis_id);
+}
+
+static PyObject *
+  PyCMOR_set_table(PyObject *self,PyObject *args)
+{
+  int table,ierr;
+  if (!PyArg_ParseTuple(args,"i",&table))
+    return NULL;
+  ierr = cmor_set_table(table);
+  if (ierr != 0 ) return NULL;
+  /* Return NULL Python Object */
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+
+static PyObject *
+  PyCMOR_variable(PyObject *self,PyObject *args)
+{
+  int ierr,var_id;
+  char *name; 
+  char *units; 
+  char *comment; 
+  char *positive;
+  char *original_name;
+  char *history;
+  int ndims;
+  char type;
+  double missing;
+  float fmissing;
+  int imissing;
+  long lmissing;
+  double tol;
+  void *pass_missing=NULL;
+  int *axes_ids;
+  PyObject *axes_obj,*missing_obj;
+  PyArrayObject *axes=NULL;
+
+  /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"ssiOcOdssss",&name,&units,&ndims,&axes_obj,&type,&missing_obj,&tol,&positive,&original_name,&history,&comment))
+    return NULL;
+
+  axes =(PyArrayObject *) PyArray_ContiguousFromObject(axes_obj,PyArray_NOTYPE,1,0);
+
+  if (axes->nd!=1) {
+    printf("ok we need to pass contiguous flattened arrays only!\n");
+    return NULL;
+  }
+  axes_ids = (int *)axes->data;
+
+  if (missing_obj == Py_None) {
+    pass_missing = NULL;
+  }
+  else {
+    missing = PyFloat_AsDouble(missing_obj);
+    if (type=='d') pass_missing=&missing;
+    else if (type=='f') {
+      fmissing = (float)missing;
+      pass_missing=&fmissing;
+    }
+    else if (type=='l') {
+      lmissing = (long)missing;
+      pass_missing=&lmissing;
+    }
+    else if (type=='i') {
+      imissing = (int)missing;
+      pass_missing=&imissing;
+    }
+  }
+  
+  ierr = cmor_variable(&var_id,name, units, ndims, axes_ids, type, pass_missing, &tol, positive, original_name, history, comment) ;
+  if (axes!=NULL) {Py_DECREF(axes);}
+  if (ierr != 0 ) return NULL;
+  return Py_BuildValue("i",var_id);
+}
+
+static PyObject *
+  PyCMOR_zfactor(PyObject *self,PyObject *args)
+{
+  int ierr,zvar_id;
+  int itmp;
+  int axis_id;
+  char *name; 
+  char *units; 
+  int ndims;
+  char type;
+  int *axes_ids;
+  void *values,*bounds;
+  PyObject *axes_obj,*values_obj,*bounds_obj;
+  PyArrayObject *axes=NULL, *values_array=NULL, *bounds_array=NULL;
+
+  /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"issiOcOO",&axis_id,&name,&units,&ndims,&axes_obj,&type,&values_obj,&bounds_obj))
+    return NULL;
+
+  if (axes_obj == Py_None) {
+    axes_ids = NULL;
+  }
+  else {
+    if (ndims>1) {
+      axes =(PyArrayObject *) PyArray_ContiguousFromObject(axes_obj,PyArray_NOTYPE,1,0);
+      axes_ids = (void *)axes->data;
+    }
+    else {
+      itmp = (int) PyInt_AsLong(axes_obj);
+      axes_ids = &itmp;
+    }
+  }
+
+
+  if (values_obj == Py_None) {
+    values = NULL;
+  }
+  else {
+    values_array =(PyArrayObject *) PyArray_ContiguousFromObject(values_obj,PyArray_NOTYPE,1,0);
+    values = (void *)values_array->data;
+  }
+
+  if (bounds_obj == Py_None) {
+    bounds = NULL;
+  }
+  else {
+    bounds_array =(PyArrayObject *) PyArray_ContiguousFromObject(bounds_obj,PyArray_NOTYPE,1,0);
+    bounds = (void *)bounds_array->data;
+  }
+  
+  ierr = cmor_zfactor(&zvar_id,axis_id, name, units, ndims, axes_ids, type, values, bounds);
+  if (axes!=NULL) {Py_DECREF(axes);}
+  if (values_array!=NULL) {Py_DECREF(values_array);}
+  if (bounds_array!=NULL) {Py_DECREF(bounds_array);}
+  if (ierr != 0 ) return NULL;
+  return Py_BuildValue("i",zvar_id);
+}
+
+
+static PyObject *
+  PyCMOR_grid_mapping(PyObject *self,PyObject *args)
+{
+  int ierr;
+  PyObject *param_nm_obj,*param_val_obj,*param_un_obj,*tmp;
+  PyArrayObject *param_val_arr=NULL;
+  void *param_val;
+  char *name;
+  int gid,i,n;
+  char nms[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  char units[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"isOOO",&gid,&name,&param_nm_obj,&param_val_obj,&param_un_obj))
+    return NULL;
+
+  param_val_arr = (PyArrayObject *) PyArray_ContiguousFromObject(param_val_obj,PyArray_NOTYPE,1,0);
+  param_val = param_val_arr->data;
+  
+  n = PyList_Size(param_nm_obj);
+  for(i=0;i<n;i++) {
+    tmp  =PyList_GetItem(param_nm_obj,i);
+    strcpy(nms[i],PyString_AsString(tmp));
+    Py_DECREF(tmp);
+    tmp  =PyList_GetItem(param_un_obj,i);
+    strcpy(units[i],PyString_AsString(tmp));
+    Py_DECREF(tmp);
+  }
+  
+  ierr = cmor_set_grid_mapping(gid,name,n,(char **)nms,CMOR_MAX_STRING,param_val,(char **)units,CMOR_MAX_STRING);
+
+  if (param_val_arr!=NULL) {Py_DECREF(param_val_arr);}
+
+  if (ierr!=0) {
+    return NULL;
+  }
+  else {
+    /* Return NULL Python Object */
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+}
+static PyObject *
+  PyCMOR_write(PyObject *self,PyObject *args)
+{
+  int ierr,var_id;
+  PyObject *data_obj=NULL;
+  PyArrayObject *data_array=NULL;
+  void *data;
+  char *suffix,*itype; 
+  char type;
+  int ntimes;
+  PyObject *times_obj=NULL;
+  PyArrayObject *times_array=NULL;
+  void *times;
+  double itime;
+  PyObject *times_bnds_obj=NULL;
+  PyArrayObject *times_bnds_array=NULL;
+  void *times_bnds;
+  PyObject *ref_obj;
+  int *ref;
+  int iref;
+
+  /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"iOssiOOO",&var_id,&data_obj,&itype,&suffix,&ntimes,&times_obj,&times_bnds_obj,&ref_obj))
+    return NULL;
+
+  data_array =(PyArrayObject *) PyArray_ContiguousFromObject(data_obj,PyArray_NOTYPE,1,0);
+  data = data_array->data;
+
+  if (times_obj == Py_None) {
+    times = NULL;
+  }
+  else {
+    if (ntimes>1) {
+      times_array =(PyArrayObject *) PyArray_ContiguousFromObject(times_obj,PyArray_NOTYPE,1,0);
+      times = (void *)times_array->data;
+    }
+    else {
+      itime = (double) PyFloat_AsDouble(times_obj);
+      times = &itime;
+    }
+  }
+
+  if (times_bnds_obj == Py_None) {
+    times_bnds = NULL;
+  }
+  else {
+    times_bnds_array =(PyArrayObject *) PyArray_ContiguousFromObject(times_bnds_obj,PyArray_NOTYPE,1,0);
+    times_bnds = (void *)times_bnds_array->data;
+  }
+
+  if (ref_obj == Py_None) {
+    ref = NULL;
+  }
+  else {
+    iref = (int) PyInt_AsLong(ref_obj);
+    ref = &iref;
+  }
+  type = itype[0];
+/*   printf("going in, suffix is: -%s-\n",suffix); */
+  ierr = 0;
+  ierr = cmor_write(var_id, data, type, suffix, ntimes, times, times_bnds, ref);
+  Py_DECREF(data_array);
+  if (times_array!=NULL) {Py_DECREF(times_array);}
+  if (times_bnds_array!=NULL) {Py_DECREF(times_bnds_array);}
+
+  if (ierr != 0 ) return NULL;
+  /* Return NULL Python Object */
+ 
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+static PyObject *
+  PyCMOR_close(PyObject *self,PyObject *args)
+{
+  PyObject *var;
+  PyObject *file;
+  PyObject *preserve;
+  int varid,ierr;
+  int dofile=0;
+  int dopreserve=0;
+  int preserved_id;
+  char file_name[CMOR_MAX_STRING];
+  if (!PyArg_ParseTuple(args,"OOO",&var,&file,&preserve)) {
+    return NULL;
+  }
+  
+  if (var == Py_None ) {
+    ierr = cmor_close();
+  }
+  else {
+    varid = (int)PyInt_AsLong(var);
+    dofile =(int)PyInt_AsLong(file);
+    dopreserve =(int)PyInt_AsLong(preserve);
+
+    if (dopreserve==1) {
+      if (dofile==1) { 
+	ierr = cmor_close_variable(varid,&file_name[0],&preserved_id);
+      }
+      else {
+	ierr = cmor_close_variable(varid,NULL,&preserved_id);
+      }
+    }
+    else {
+      if (dofile==1) { 
+	ierr = cmor_close_variable(varid,&file_name[0],NULL);
+      }
+      else {
+	ierr = cmor_close_variable(varid,NULL,NULL);
+      }
+    }
+  }
+
+  if (ierr!=0) {
+    return NULL;
+  }
+  else {
+    if (dopreserve==1) {
+      if (dofile==1) {
+	return Py_BuildValue("si",file_name,preserved_id);
+      }
+      else {
+	return Py_BuildValue("i",preserved_id);
+      }
+    }
+    else {
+      if (dofile==1) {
+	return Py_BuildValue("s",file_name);
+      }
+      else {
+	return Py_BuildValue("i",ierr);
+      }
+    }
+  }
+}
+
+    
+static PyObject *
+  PyCMOR_time_varying_grid_coordinate(PyObject *self,PyObject *args)
+{
+  int ierr,grid_id,coord_var_id;
+  char *table_entry;
+  char *units;
+  char type;
+  double missing;
+  PyObject *missing_obj;
+  void *pass_missing;
+
+ /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"isscO",&grid_id,&table_entry,&units,&type,&missing_obj))
+    return NULL;
+  if (missing_obj == Py_None) {
+    pass_missing = NULL;
+  }
+  else {
+    missing = PyFloat_AsDouble(missing_obj);
+    pass_missing=(void *)&missing;
+  }
+  ierr = cmor_time_varying_grid_coordinate(&coord_var_id,grid_id, table_entry, units, type, pass_missing, NULL);
+
+  if (ierr != 0 ) return NULL;
+  return Py_BuildValue("i",coord_var_id);  
+}
+static PyObject *
+  PyCMOR_grid(PyObject *self,PyObject *args)
+{
+  int ierr;
+  PyObject *axes_obj,*lat_obj,*lon_obj,*blat_obj,*blon_obj;
+  PyArrayObject *axes_arr=NULL,*lat_arr=NULL,*lon_arr=NULL,*blat_arr=NULL,*blon_arr=NULL;
+  void *axes,*lon,*lat,*blon,*blat;
+  char type;
+  int nvert,ndims;
+  int id;
+  char itype;
+
+  /* HUGE assumtion here is that the data is contiguous! */
+  if (!PyArg_ParseTuple(args,"iOcOOiOO",&ndims,&axes_obj,&itype,&lat_obj,&lon_obj,&nvert,&blat_obj,&blon_obj))
+    return NULL;
+
+  type = itype;
+  axes_arr = (PyArrayObject *) PyArray_ContiguousFromObject(axes_obj,PyArray_NOTYPE,1,0);
+  axes = (void *) axes_arr->data;
+
+  if (lat_obj == Py_None) {
+    lat = NULL;
+  }
+  else {
+    lat_arr = (PyArrayObject *) PyArray_ContiguousFromObject(lat_obj,PyArray_NOTYPE,1,0);
+    lat = (void *)lat_arr->data;
+  }
+
+  if (lon_obj == Py_None) {
+    lon = NULL;
+  }
+  else {
+    lon_arr = (PyArrayObject *) PyArray_ContiguousFromObject(lon_obj,PyArray_NOTYPE,1,0);
+    lon = (void *)lon_arr->data;
+  }
+
+  if (blat_obj == Py_None) {
+    blat = NULL;
+  }
+  else {
+      blat_arr = (PyArrayObject *) PyArray_ContiguousFromObject(blat_obj,PyArray_NOTYPE,1,0);
+      blat = (void *)blat_arr->data;
+  }
+  if (blon_obj == Py_None) {
+    blon = NULL;
+  }
+  else {
+      blon_arr = (PyArrayObject *) PyArray_ContiguousFromObject(blon_obj,PyArray_NOTYPE,1,0);
+      blon = (void *)blon_arr->data;
+  }
+
+  ierr = cmor_grid(&id,ndims,axes,type,lat,lon,nvert,blat,blon);
+
+  if (axes_arr!=NULL) {Py_DECREF(axes_arr);}
+  if (lat_arr!=NULL) {Py_DECREF(lat_arr);}
+  if (blat_arr!=NULL) {Py_DECREF(blat_arr);}
+  if (lon_arr!=NULL) {Py_DECREF(lon_arr);}
+  if (blon_arr!=NULL) {Py_DECREF(blon_arr);}
+  if (ierr != 0 ) return NULL;
+  return Py_BuildValue("i",id);
+}
+
+
+static PyMethodDef MyExtractMethods[]= {
+  {"setup", PyCMOR_setup , METH_VARARGS},
+  {"dataset", PyCMOR_dataset , METH_VARARGS},
+  {"load_table", PyCMOR_load_table , METH_VARARGS},
+  {"axis", PyCMOR_axis , METH_VARARGS},
+  {"set_table", PyCMOR_set_table , METH_VARARGS},
+  {"variable", PyCMOR_variable , METH_VARARGS},
+  {"zfactor", PyCMOR_zfactor , METH_VARARGS},
+  {"write", PyCMOR_write , METH_VARARGS},
+  {"grid", PyCMOR_grid , METH_VARARGS},
+  {"time_varying_grid_coordinate", PyCMOR_time_varying_grid_coordinate , METH_VARARGS},
+  {"set_grid_mapping", PyCMOR_grid_mapping , METH_VARARGS},
+  {"getCMOR_defaults_include",PyCMOR_getincvalues, METH_VARARGS},
+  {"close", PyCMOR_close , METH_VARARGS},
+  {"set_cur_dataset_attribute",PyCMOR_set_cur_dataset_attribute, METH_VARARGS},
+  {"get_cur_dataset_attribute",PyCMOR_get_cur_dataset_attribute, METH_VARARGS},
+  {"has_cur_dataset_attribute",PyCMOR_has_cur_dataset_attribute, METH_VARARGS},
+  {"create_output_path",PyCMOR_create_output_path, METH_VARARGS},
+  {"get_original_shape",PyCMOR_get_original_shape, METH_VARARGS},
+  {NULL, NULL} /*sentinel */
+};
+
+PyMODINIT_FUNC init_cmor(void)
+{
+  (void) Py_InitModule("_cmor", MyExtractMethods);
+  import_array();
+  
+}
+
+/* int main(int argc,char **argv) */
+/* { */
+/*   Py_SetProgramName(argv[0]); */
+/*   Py_Initialize(); */
+/*   init_cmor(); */
+/*   return 0; */
+/* } */
+
diff --git a/Src/cmor.c b/Src/cmor.c
new file mode 100644
index 0000000..c50d39f
--- /dev/null
+++ b/Src/cmor.c
@@ -0,0 +1,3853 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include<sys/stat.h>
+#include "uuid.h"
+#include<unistd.h>
+#include <string.h>
+#include "cmor.h"
+#include <netcdf.h>
+#include <udunits2.h>
+#include <time.h>
+#include <errno.h>
+
+#include <sys/types.h>
+
+
+    /* this is defining NETCDF4 variable if we are using NETCDF3 not used anywhere else*/
+#ifndef NC_NETCDF4
+#define NC_NETCDF4 0
+#define NC_CLASSIC_MODEL 0
+int nc_def_var_deflate(int i,int j,int k,int l, int m) {return 0;};
+int nc_def_var_chunking(int i,int j,int k,size_t *l) {return 0;};
+#endif
+
+
+int USE_NETCDF_4;
+
+int cleanup_varid=-1;
+
+const char CMOR_VALID_CALENDARS[CMOR_N_VALID_CALS][CMOR_MAX_STRING] = { "gregorian","standard", "proleptic_gregorian","noleap","365_day","360_day","julian","none"};
+
+cmor_dataset_def cmor_current_dataset;
+cmor_table_t cmor_tables[CMOR_MAX_TABLES];
+cmor_var_t cmor_vars[CMOR_MAX_VARIABLES];
+cmor_axis_t cmor_axes[CMOR_MAX_AXES];
+cmor_grid_t cmor_grids[CMOR_MAX_GRIDS];
+int CMOR_MODE;
+int CMOR_TABLE;
+int CMOR_VERBOSITY;
+int CMOR_NETCDF_MODE;
+
+int cmor_naxes;
+int cmor_nvars;
+int cmor_ntables;
+int cmor_ngrids;
+
+int cmor_nerrors;
+int cmor_nwarnings;
+
+int did_history = 0;
+
+int CMOR_CREATE_SUBDIRECTORIES = 1;
+
+char cmor_input_path[CMOR_MAX_STRING];
+char cmor_traceback_info[CMOR_MAX_STRING];
+
+void  cmor_check_forcing_validity(int table_id,char *value) {
+  int i,j,n,found=0;
+  char msg[CMOR_MAX_STRING];
+  char astr[CMOR_MAX_STRING];
+  char **bstr;
+
+
+  if (cmor_tables[table_id].nforcings==0) return;
+
+  strcpy(astr,value);
+  for (i=0;i<strlen(astr);i++) {
+    if (astr[i]==',') astr[i]=' ';
+  }
+  cmor_convert_string_to_list(astr,'c',&bstr,&n);
+  if (n==0) return;
+
+  for (i=0;i<n;i++) {
+    found=0;
+    for(j=0;j<cmor_tables[table_id].nforcings;j++) {
+      if (strcmp(bstr[i],cmor_tables[table_id].forcings[j])==0) {
+	found=1;
+	break;
+      }
+    }
+    if (found==0) {
+      sprintf(msg,"forcing attribute elt %i (%s) is not valid, valid values are:",i,bstr[i]);
+      for(j=0;j<cmor_tables[table_id].nforcings;j++) {
+	strncat(msg," ",CMOR_MAX_STRING);
+	strncat(msg,cmor_tables[table_id].forcings[j],CMOR_MAX_STRING);
+	strncat(msg,",",CMOR_MAX_STRING);
+      }
+      msg[strlen(msg)-1]='\0';
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  /* Ok now we need to clean up the memory allocations.... */
+  for (i=0;i<n;i++) {
+    free(bstr[i]);
+  }
+  free(bstr);
+  return;
+}
+
+int cmor_check_expt_id(char *expt_id, int table_id, char *gbl_lng, char *gbl_sht) {
+  int i,j,k,l,m;
+  char msg[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+
+  cmor_add_traceback("cmor_check_expt_id");
+
+  j=0;
+  for (i=0;i<=cmor_tables[table_id].nexps;i++) {
+    k=strlen(expt_id);
+    l = strlen(cmor_tables[table_id].expt_ids[i]);
+    m = strlen(cmor_tables[table_id].sht_expt_ids[i]);
+    if ((l>4)&&(k>4)) {
+      strncpy(msg,&cmor_tables[table_id].expt_ids[i][strlen(cmor_tables[table_id].expt_ids[i])-4],4);
+      msg[4]='\0';
+    }
+    else {
+      strcpy(msg,"nope");
+    }
+    if (strcmp(msg,"XXXX")==0) { /* we have one of these weird expt nms thing... */
+      /* ok now we can compare */
+      if ((strncmp(cmor_tables[table_id].expt_ids[i],expt_id,l-4)==0) || 
+	  (strncmp(cmor_tables[table_id].sht_expt_ids[i],expt_id,m-4)==0)) {
+	j=1;
+	l=strlen(cmor_tables[table_id].expt_ids[i]);
+	strncpy(ctmp,cmor_tables[table_id].expt_ids[i],l-4);
+	/* but we need to replace the last 4 char from X to the actual 4 dgits */
+	strncpy(&ctmp[l-4],&expt_id[k-4],4); /* ok the sht_Exp id with the right digits */
+	ctmp[l]='\0';
+	/* Ok and now use this to reset the global attribute */
+	cmor_set_cur_dataset_attribute(gbl_lng,ctmp,0);
+	l=strlen(cmor_tables[table_id].sht_expt_ids[i]);
+	strncpy(ctmp,cmor_tables[table_id].sht_expt_ids[i],l-4);
+	/* but we need to replace the last 4 char from X to the actual 4 dgits */
+	strncpy(&ctmp[l-4],&expt_id[k-4],4); /* ok the sht_Exp id with the right digits */
+	ctmp[l]='\0';
+	/* Ok and now use this to reset the global attribute */
+	cmor_set_cur_dataset_attribute(gbl_sht,ctmp,1);
+	strncpy(expt_id,ctmp,CMOR_MAX_STRING);
+	break;
+      }
+    }
+    else if (strcmp(msg,"DDHH")==0) { /* we have one of these weird expt nms thing... */
+      /* ok now we can compare */
+      if ((strncmp(cmor_tables[table_id].expt_ids[i],expt_id,l-10)==0) || 
+	  (strncmp(cmor_tables[table_id].sht_expt_ids[i],expt_id,m-10)==0)) {
+	j=1;
+	l=strlen(cmor_tables[table_id].expt_ids[i]);
+	strncpy(ctmp,cmor_tables[table_id].expt_ids[i],l-10);
+	/* but we need to replace the last 10 char from X to the actual 10 dgits */
+	strncpy(&ctmp[l-10],&expt_id[k-10],10); /* ok the sht_Exp id with the right digits */
+	ctmp[l]='\0';
+	/* Ok and now use this to reset the global attribute */
+	cmor_set_cur_dataset_attribute(gbl_lng,ctmp,0);
+	l=strlen(cmor_tables[table_id].sht_expt_ids[i]);
+	strncpy(ctmp,cmor_tables[table_id].sht_expt_ids[i],l-4);
+	/* but we need to replace the last 4 char from X to the actual 4 dgits */
+	strncpy(&ctmp[l-10],&expt_id[k-10],10); /* ok the sht_Exp id with the right digits */
+	ctmp[l]='\0';
+	/* Ok and now use this to reset the global attribute */
+	cmor_set_cur_dataset_attribute(gbl_sht,ctmp,1);
+	strncpy(expt_id,ctmp,CMOR_MAX_STRING);
+	break;
+      }
+    }
+    else {
+      if ((strncmp(cmor_tables[table_id].expt_ids[i],expt_id,CMOR_MAX_STRING)==0) 
+	  || (strncmp(cmor_tables[table_id].sht_expt_ids[i],expt_id,CMOR_MAX_STRING)==0) ) {
+	j=1;
+	cmor_set_cur_dataset_attribute(gbl_lng,cmor_tables[table_id].expt_ids[i],0);
+	cmor_set_cur_dataset_attribute(gbl_sht,cmor_tables[table_id].sht_expt_ids[i],1);
+	strncpy(expt_id,cmor_tables[table_id].sht_expt_ids[i],CMOR_MAX_STRING); /* make sure it is the short id */
+	break;
+      }
+    }
+  } 
+  cmor_pop_traceback();
+  if (j==0) return 1;
+  return 0;
+}
+
+
+int strncpytrim(char *out, char *in, int max) {
+  int i,n,j,k;
+  j=0;
+  n=strlen(in);
+  if (n>max)  n=max;
+  while ((in[j]==' ') && (j<n)) {
+    j++;
+  }
+  k=n-1;
+  while ((in[k]==' ') && (k>0)) {
+    k--;
+  }
+  for(i=j;i<=k;i++) {
+    out[i-j]=in[i];
+  }
+  out[i-j]='\0';
+
+  return 0;   
+}
+
+int strncattrim(char *in, char *add, int max) {
+  int i,n,j,n2,k;
+  j=0;
+  n=strlen(add);
+  n2=strlen(in);
+  if (n>max) n=max;
+  while ((add[j]==' ') && (j<n)) {
+    j++;
+  }
+  k=n-1;
+  while ((add[k]==' ') && (k>0)) {
+    k--;
+  }
+  n2=strlen(in);
+  for(i=j;i<=k;i++) {
+    in[n2+i-j]=add[i];
+  }
+  in[n2+i-j]='\0';
+  return 0;   
+}
+
+/* int strcmptrim(char *in1,char *in2) { */
+/*   char tmp1[CMOR_MAX_STRING]; */
+/*   char tmp2[CMOR_MAX_STRING]; */
+/*   strncpytrim(&tmp1,in1,CMOR_MAX_STRING); */
+/*   strncpytrim(&tmp2,in2,CMOR_MAX_STRING); */
+/*   return strcmp(tmp1,tmp2); */
+/* } */
+
+
+int CMOR_HAS_BEEN_SETUP=0;
+ut_system *ut_read=NULL;
+FILE  *output_logfile;
+
+void cmor_is_setup(void){
+  extern int CMOR_HAS_BEEN_SETUP;
+  char msg[CMOR_MAX_STRING];
+  extern void cmor_handle_error(char error_msg[CMOR_MAX_STRING],int level);
+  cmor_add_traceback("cmor_is_setup");
+  if (CMOR_HAS_BEEN_SETUP==0) {
+    snprintf(msg,CMOR_MAX_STRING,"Error you need to run cmor_setup before calling any cmor_function");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  cmor_pop_traceback();
+  return;
+}
+
+void cmor_add_traceback(char *name) {
+  char tmp[CMOR_MAX_STRING];
+/*   printf("ok entering traceback for: %i %s\n",strlen(cmor_traceback_info),name); */
+  if (strlen(cmor_traceback_info)==0) {
+    sprintf(cmor_traceback_info,"%s\n",name);
+  }
+  else {
+    sprintf(tmp,"%s\ncalled from: %s",name,cmor_traceback_info);
+    strncpy(cmor_traceback_info,tmp,CMOR_MAX_STRING);
+  }
+  return;
+}
+void cmor_pop_traceback(void) {
+  int i;
+  char tmp[CMOR_MAX_STRING];
+  strcpy(tmp,"");
+/*   printf("ok removing a traceback from ---%i---\n",strlen(cmor_traceback_info)); */
+  for (i=0;i<strlen(cmor_traceback_info);i++) {
+    if (strncmp(&cmor_traceback_info[i],"called from: ",13)==0) {
+/*       printf("ok we have i at: %i and tb at: %s\n",i,cmor_traceback_info); */
+/*       printf("ok we have i at: %i and tb at: %s\n",i,&cmor_traceback_info[i+13]); */
+      strcpy(tmp,&cmor_traceback_info[i+13]);
+      break;
+    }
+  }
+  strcpy(cmor_traceback_info,tmp);
+/*   printf("we are left with: --%i---\n",strlen(cmor_traceback_info)); */
+  return;
+}
+
+int cmor_prep_units(char *uunits, char *cunits, ut_unit **user_units,ut_unit **cmor_units,cv_converter **ut_cmor_converter)
+{
+  extern ut_system *ut_read;
+  char local_unit[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  extern void cmor_handle_error(char error_msg[CMOR_MAX_STRING],int level);
+  cmor_add_traceback("cmor_prep_units");
+  cmor_is_setup();
+  *cmor_units = ut_parse(ut_read, cunits,UT_ASCII);
+  if (ut_get_status() != UT_SUCCESS ) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: analyzing units from cmor (%s)",cunits);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  strncpy(local_unit,uunits,CMOR_MAX_STRING);
+  ut_trim(local_unit,UT_ASCII);
+  *user_units = ut_parse(ut_read, local_unit, UT_ASCII);
+  if (ut_get_status() != UT_SUCCESS ) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: analyzing units from user (%s)",local_unit);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  if (ut_are_convertible(*cmor_units,*user_units)==0 ) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: cmor and user units are incompatible: %s and %s",cunits,uunits);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  *ut_cmor_converter=ut_get_converter(*user_units,*cmor_units);
+  if (*ut_cmor_converter == NULL) {
+  }
+  if (ut_get_status() != UT_SUCCESS ) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error getting converter from %s to %s",cunits,local_unit);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_have_NetCDF4(void) {
+  char version[50];
+  int major;
+  strncpy(version,nc_inq_libvers(),50);
+  sscanf(version,"%1d%*s",&major);
+  if (major!=4) return 1;
+  return 0;
+}
+int cmor_have_NetCDF41min(void) {
+  char version[50];
+  int major,minor;
+  strncpy(version,nc_inq_libvers(),50);
+  sscanf(version,"%1d%*c%1d%*s",&major,&minor);
+  if (major>4) return 0;
+  if (major<4) return 1;
+  if (minor<1) return 1;
+  return 0;
+}
+int cmor_have_NetCDF3(void) {
+  char version[50];
+  int major;
+  strncpy(version,nc_inq_libvers(),50);
+  sscanf(version,"%*c%1d%*s",&major);
+  if (major!=3) return 1;
+  return 0;
+}
+int cmor_have_NetCDF363(void) {
+  char version[50];
+  int major,minor,patch;
+  strncpy(version,nc_inq_libvers(),50);
+  sscanf(version,"%*c%1d%*c%1d%*c%1d%*s",&major,&minor,&patch);
+  if ( (major==3) && (minor==6) && (patch=3)) return 0;
+  return 1;
+}
+
+void cmor_handle_error(char error_msg[CMOR_MAX_STRING],int level)
+{
+  int i,n;
+  char msg[CMOR_MAX_STRING];
+  extern FILE *output_logfile;
+
+  if (output_logfile == NULL) output_logfile = stderr;
+
+  msg[0]='\0';
+  if (CMOR_VERBOSITY!=CMOR_QUIET) {
+    fprintf(output_logfile,"\n");
+  }
+  if (level == CMOR_WARNING) {
+    cmor_nwarnings++; 
+    if (CMOR_VERBOSITY!=CMOR_QUIET) {
+#ifdef COLOREDOUTPUT
+      fprintf (output_logfile,"%c[%d;%dm",0X1B,2,34);
+#endif
+      fprintf (output_logfile,"C Traceback:\nIn function: %s",cmor_traceback_info);
+#ifdef COLOREDOUTPUT
+      fprintf (output_logfile,"%c[%dm",0X1B,0);
+#endif
+    fprintf (output_logfile,"\n\n");
+#ifdef COLOREDOUTPUT
+      fprintf (output_logfile,"%c[%d;%d;%dm",0X1B,1,34,47);
+#endif
+      snprintf (msg,CMOR_MAX_STRING, "! Warning: %s  !",error_msg);
+    }
+  }
+  else {
+    cmor_nerrors++;
+#ifdef COLOREDOUTPUT
+    fprintf (output_logfile,"%c[%d;%d;%dm",0X1B,2,31,47);
+#endif
+    fprintf (output_logfile,"C Traceback:\nIn function: %s",cmor_traceback_info);
+#ifdef COLOREDOUTPUT
+    fprintf (output_logfile,"%c[%dm",0X1B,0);
+#endif
+    fprintf (output_logfile,"\n\n");
+#ifdef COLOREDOUTPUT
+    fprintf (output_logfile,"%c[%d;%d;%dm",0X1B,1,31,47);
+#endif
+    snprintf(msg,CMOR_MAX_STRING,"! Error: %s !",error_msg);
+  }
+  n = strlen(msg);
+  if (CMOR_VERBOSITY!=CMOR_QUIET || level!=CMOR_WARNING) {
+    for( i=0;i<n;i++) fprintf(output_logfile,"!");
+    fprintf(output_logfile,"\n");
+    fprintf(output_logfile,"!");
+    for( i=0;i<n-2;i++) fprintf(output_logfile," ");
+    fprintf(output_logfile,"!\n");
+    fprintf(output_logfile,"%s\n",msg);
+    fprintf(output_logfile,"!");
+    for( i=0;i<n-2;i++) fprintf(output_logfile," ");
+    fprintf(output_logfile,"!\n");
+    for( i=0;i<n;i++) fprintf(output_logfile,"!");
+#ifdef COLOREDOUTPUT
+    fprintf (output_logfile,"%c[%dm",0X1B,0);
+#endif
+    fprintf (output_logfile,"\n\n");
+  }
+  if ((CMOR_MODE == CMOR_EXIT_ON_WARNING) || (level == CMOR_CRITICAL ) ) {
+    if (cleanup_varid!=-1) remove(cmor_vars[cleanup_varid].current_path);
+    exit(1);
+  }
+}
+
+
+int cmor_convert_char_to_hyphen(char c)
+{
+  if ((c==' ') || (c=='_') || (c=='(') || (c==')') || (c=='.') || 
+      (c==';') || (c==',') || (c=='[') || (c==']') || (c==':') ||
+      (c=='/') || (c=='*') || (c=='?') || (c=='<') || (c=='>') ||
+      (c=='"') || (c=='\'') || (c=='{') || (c=='}') || (c=='&'))
+    return 1;
+  return 0;
+}
+
+void cmor_reset_variable(int var_id) {
+  extern cmor_var_t cmor_vars[];
+  int j;
+  cmor_vars[var_id].self=-1;
+  cmor_vars[var_id].grid_id=-1;
+  cmor_vars[var_id].sign=1;
+  cmor_vars[var_id].zfactor=-1;
+  cmor_vars[var_id].ref_table_id=-1;
+  cmor_vars[var_id].ref_var_id=-1;
+  cmor_vars[var_id].initialized=-1;
+  cmor_vars[var_id].closed=0;
+  cmor_vars[var_id].nc_var_id=-999;
+  for (j=0;j<CMOR_MAX_VARIABLES;j++) cmor_vars[var_id].nc_zfactors[j]=-999;
+  cmor_vars[var_id].nzfactor=0;
+  cmor_vars[var_id].ntimes_written=0;
+  for (j=0;j<10;j++) {
+    cmor_vars[var_id].ntimes_written_coords[j]=-1;
+    cmor_vars[var_id].associated_ids[j]=-1;
+    cmor_vars[var_id].ntimes_written_associated[j]=0;
+  }
+  cmor_vars[var_id].time_nc_id=-999;
+  cmor_vars[var_id].time_bnds_nc_id=-999;
+  cmor_vars[var_id].id[0]='\0';
+  cmor_vars[var_id].ndims=0;
+  for (j=0;j<CMOR_MAX_DIMENSIONS;j++) {
+    cmor_vars[var_id].singleton_ids[j]=-1; /* place holder for singleton axes ids */
+    cmor_vars[var_id].axes_ids[j]=-1; /* place holder for singleton axes ids */
+    cmor_vars[var_id].original_order[j]=-1; /* place holder for singleton axes ids */
+  }
+  for (j=0;j<CMOR_MAX_ATTRIBUTES;j++) {
+    cmor_vars[var_id].attributes_values_char[j][0]='\0';
+    cmor_vars[var_id].attributes_values_num[j]=-999.;
+    cmor_vars[var_id].attributes_type[j]='\0';
+    cmor_vars[var_id].attributes[j][0]='\0';
+  }
+  cmor_vars[var_id].nattributes=0;
+  cmor_vars[var_id].type='\0';
+  cmor_vars[var_id].itype='N';
+  cmor_vars[var_id].missing=1.e20;
+  cmor_vars[var_id].omissing=1.e20;
+  cmor_vars[var_id].tolerance=1.e-4;
+  cmor_vars[var_id].valid_min=1.e20;
+  cmor_vars[var_id].valid_max=1.e20;
+  cmor_vars[var_id].ok_min_mean_abs=1.e20;
+  cmor_vars[var_id].ok_max_mean_abs=1.e20;
+  cmor_vars[var_id].shuffle=0;
+  cmor_vars[var_id].deflate=1;
+  cmor_vars[var_id].deflate_level=1;
+  cmor_vars[var_id].nomissing=1;
+  cmor_vars[var_id].iunits[0]='\0';
+  cmor_vars[var_id].ounits[0]='\0';
+  cmor_vars[var_id].isbounds=0;
+  cmor_vars[var_id].needsinit=1;
+  cmor_vars[var_id].zaxis=-1;
+  if (cmor_vars[var_id].values != NULL) free(cmor_vars[var_id].values);
+  cmor_vars[var_id].values = NULL;
+  cmor_vars[var_id].first_time=-999.;
+  cmor_vars[var_id].last_time=-999.;
+  cmor_vars[var_id].base_path[0]='\0';
+  cmor_vars[var_id].current_path[0]='\0';
+  cmor_vars[var_id].suffix[0]='\0';
+  cmor_vars[var_id].suffix_has_date=0;
+}
+
+int cmor_setup(char *path,int *netcdf, int *verbosity, int *mode, char *logfile, int *create_subdirectories)
+{
+  extern cmor_axis_t cmor_axes[];
+  extern int CMOR_TABLE,cmor_ntables;
+  extern ut_system *ut_read;
+  ut_unit *dimlessunit=NULL,*perunit=NULL,*newequnit=NULL;
+  ut_status myutstatus;
+  extern cmor_dataset_def cmor_current_dataset;
+  int i,j,ierr;
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  char tmplogfile[CMOR_MAX_STRING];
+  uuid_t *myuuid;
+  uuid_fmt_t fmt;
+  void *myuuid_str=NULL;
+  size_t uuidlen;
+  struct stat buf;
+  time_t lt;
+  struct tm *ptr;
+  extern FILE *output_logfile;
+  extern int did_history;
+
+  strcpy(cmor_traceback_info,"");
+  cmor_add_traceback("cmor_setup");
+
+  /* ok we need to know if we are using NC3 or 4 */
+  USE_NETCDF_4 = -1;
+  if (cmor_have_NetCDF3()==0) {
+    USE_NETCDF_4 = 0;
+    /* Now we need to make sure it's 3.6.3 */
+    if (cmor_have_NetCDF363()!=0) {
+      sprintf(msg,"You are using an older version of NetCDF3 (%s), you need 3.6.3",nc_inq_libvers());
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else if (cmor_have_NetCDF4()==0) {
+    USE_NETCDF_4 = 1;
+    if (cmor_have_NetCDF41min()!=0) {
+      sprintf(msg,"You are using a wrong version of NetCDF4 (%s), you need 4.1",nc_inq_libvers());
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else {
+    sprintf(msg,"You are using a wrong version of NetCDF (%s), you need 3.6.3 or 4.1",nc_inq_libvers());
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  did_history=0;
+  CMOR_HAS_BEEN_SETUP=1;
+  CMOR_TABLE=-1;
+  cmor_ngrids=-1;
+  cmor_nvars=-1;
+  cmor_naxes=-1;
+  cmor_ntables=-1;
+  cmor_nerrors = 0 ;
+  cmor_nwarnings = 0 ;
+  if (logfile==NULL) {
+    output_logfile = NULL;
+  }
+  else {
+#ifdef COLOREDOUTPUT
+#undef COLOREDOUTPUT
+#endif
+    cmor_trim_string(logfile,tmplogfile);
+/*     printf("got in : -%s-\n",logfile); */
+/*     printf("got out: -%s-\n",tmplogfile); */
+    output_logfile = NULL;
+    output_logfile = fopen(tmplogfile,"r");
+    if (output_logfile!=NULL) {
+      /* logfile already exists need to rename it */
+      /* Figure out the time */
+      stat(tmplogfile,&buf);
+      lt = buf.st_ctime;
+      ptr = localtime(&lt);
+      snprintf(msg,CMOR_MAX_STRING,"%s_%.4i-%.2i-%.2iT%.2i:%.2i:%.2i",tmplogfile,ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);
+      fclose(output_logfile);
+      rename(tmplogfile,msg);
+      snprintf(msg2,CMOR_MAX_STRING,"Logfile %s already existed. Renamed to: %s",tmplogfile,msg);
+      output_logfile = NULL;
+      output_logfile = fopen(tmplogfile,"w");
+      if (output_logfile == NULL) {
+	snprintf(msg2,CMOR_MAX_STRING,"Could not open logfile %s for writing", tmplogfile);
+	cmor_handle_error(msg2,CMOR_CRITICAL);
+      }
+      cmor_handle_error(msg2,CMOR_WARNING);
+    }
+    else {
+      output_logfile = fopen(tmplogfile,"w");
+      if (output_logfile == NULL) {
+	snprintf(msg2,CMOR_MAX_STRING,"Could not open logfile %s for writing", tmplogfile);
+	cmor_handle_error(msg2,CMOR_CRITICAL);
+      }
+    }
+  }
+
+  if (mode==NULL) {
+    CMOR_MODE=CMOR_NORMAL;
+  }
+  else {
+    if (*mode!=CMOR_EXIT_ON_WARNING && *mode!=CMOR_EXIT_ON_MAJOR && *mode!=CMOR_NORMAL ) {
+      snprintf(msg,CMOR_MAX_STRING,"exit mode can be either CMOR_EXIT_ON_WARNING CMOR_NORMAL or CMOR_EXIT_ON_MAJOR");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    CMOR_MODE=*mode;
+  }
+  if (verbosity==NULL) {
+    CMOR_VERBOSITY = CMOR_NORMAL;
+  }
+  else {
+    if (*verbosity!=CMOR_QUIET && *verbosity!=CMOR_NORMAL ) {
+      snprintf(msg,CMOR_MAX_STRING,"verbosity mode can be either CMOR_QUIET or CMOR_NORMAL");
+      cmor_handle_error(msg,CMOR_NORMAL);
+    }
+    CMOR_VERBOSITY=*verbosity;
+  }
+  if (netcdf == NULL) {
+    CMOR_NETCDF_MODE = CMOR_PRESERVE;
+  }
+  else {
+    if (*netcdf!=CMOR_PRESERVE_4 && *netcdf!=CMOR_APPEND_4 && *netcdf!=CMOR_REPLACE_4 && *netcdf!=CMOR_PRESERVE_3 && *netcdf!=CMOR_APPEND_3 && *netcdf!=CMOR_REPLACE_3) {
+      snprintf(msg,CMOR_MAX_STRING,"file mode can be either CMOR_PRESERVE, CMOR_APPEND, CMOR_REPLACE, CMOR_PRESERVE_4, CMOR_APPEND_4, CMOR_REPLACE_4, CMOR_PRESERVE_3, CMOR_APPEND_3 or CMOR_REPLACE_3");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    CMOR_NETCDF_MODE = *netcdf;
+  }
+
+  /* Make sure we are not trying to use NETCDF4 mode while linked against NetCDF3 */
+  if (((CMOR_NETCDF_MODE==CMOR_PRESERVE_4)||(CMOR_NETCDF_MODE==CMOR_REPLACE_4)||(CMOR_NETCDF_MODE==CMOR_APPEND_4)) && (USE_NETCDF_4==0)) {
+    sprintf(msg,"You are trying to use a NetCDF4 mode but linked against NetCDF3 libraries");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+
+  if ((path == NULL) || (strcmp(path,"")==0 )) {
+    strncpy(cmor_input_path,".",CMOR_MAX_STRING);
+  }
+  else {
+    strncpytrim(cmor_input_path,path,CMOR_MAX_STRING);
+  }
+  for (i=0;i<CMOR_MAX_VARIABLES;i++) {
+    cmor_reset_variable(i);
+  }
+
+  for (i=0;i<CMOR_MAX_AXES;i++) {
+    cmor_axes[i].ref_table_id=-1;
+    cmor_axes[i].ref_axis_id=-1;
+    cmor_axes[i].isgridaxis=-1;
+    cmor_axes[i].axis='\0';
+    cmor_axes[i].iunits[0]='\0';
+    cmor_axes[i].id[0]='\0';
+    if (cmor_axes[i].values != NULL) free(cmor_axes[i].values);
+    cmor_axes[i].values = NULL;
+    if (cmor_axes[i].bounds != NULL) free(cmor_axes[i].bounds);
+    cmor_axes[i].bounds = NULL;
+    if (cmor_axes[i].cvalues != NULL) {
+      for (j=0;j<cmor_axes[i].length;j++) {
+	if (cmor_axes[i].cvalues[j]!=NULL) {
+	  free(cmor_axes[i].cvalues[j]);
+	  cmor_axes[i].cvalues[j]=NULL;
+	}
+      }
+      free(cmor_axes[i].cvalues);
+    }
+    cmor_axes[i].cvalues = NULL;
+    cmor_axes[i].length=0;
+    cmor_axes[i].revert=1; /* 1 means no reverse -1 means reverse */
+    cmor_axes[i].offset=0;
+    cmor_axes[i].type='\0';
+    for (j=0;j<CMOR_MAX_ATTRIBUTES;j++) {
+      cmor_axes[i].attributes_values_char[j][0]='\0'; 
+      cmor_axes[i].attributes_values_num[j]=-999.; 
+      cmor_axes[i].attributes_type[j]='\0'; 
+      cmor_axes[i].attributes[j][0]='\0'; 
+    }
+    cmor_axes[i].nattributes=0;
+    cmor_axes[i].hybrid_in=0;
+    cmor_axes[i].hybrid_out=0;
+    cmor_axes[i].store_in_netcdf = 1;
+    ierr = cmor_set_axis_attribute(i,"units",'c',"");
+    ierr = cmor_set_axis_attribute(i,"interval",'c',"");
+  }
+
+  if (create_subdirectories != NULL) {
+    CMOR_CREATE_SUBDIRECTORIES = *create_subdirectories;
+  }
+
+  if ((CMOR_CREATE_SUBDIRECTORIES!=1) && (CMOR_CREATE_SUBDIRECTORIES!=0)) {
+    snprintf(msg,CMOR_MAX_STRING,"cmor_setup: create_subdirectories must be 0 or 1");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  /* initialize the udunits */
+  /*   printf("ok init utread\n"); */
+  if (ut_read!=NULL) {
+    ut_free_system(ut_read);
+  }
+  ut_read = ut_read_xml(NULL);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error reading units system");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (newequnit!= NULL) ut_free(newequnit);
+  newequnit = ut_new_base_unit(ut_read);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: creating dimlessnew base unit");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  myutstatus = ut_map_name_to_unit("eq",UT_ASCII,newequnit);
+  if (myutstatus != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error mapping dimless 'eq' unit");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (dimlessunit!= NULL) ut_free(dimlessunit);
+  dimlessunit = ut_new_dimensionless_unit(ut_read);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: creating dimless unit");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  myutstatus = ut_map_name_to_unit("dimless",UT_ASCII,dimlessunit);
+  if (myutstatus != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error mapping dimless unit");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (perunit!=NULL) ut_free(perunit);
+  perunit = ut_scale(.01,dimlessunit);
+  if (myutstatus != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error creating percent unit");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  myutstatus = ut_map_name_to_unit("%",UT_ASCII,perunit);
+  if (myutstatus != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error mapping percent unit");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  /* initialized dataset */
+  for (i=0;i<CMOR_MAX_ELEMENTS;i++) {
+    cmor_current_dataset.attributes_names[i][0]='\0';
+    cmor_current_dataset.attributes_values[i][0]='\0';
+  }
+  cmor_current_dataset.nattributes=0;
+  cmor_current_dataset.realization=0;
+  cmor_current_dataset.leap_year=0;
+  cmor_current_dataset.leap_month=0;
+  cmor_current_dataset.associate_file=0;
+  cmor_current_dataset.associated_file=-1;
+  /* generates a unique id */
+  uuid_create(&myuuid);
+  uuid_make(myuuid,4);
+  myuuid_str = NULL;
+  fmt = UUID_FMT_STR;
+  uuid_export(myuuid,fmt,&myuuid_str,&uuidlen);
+  strncpy(cmor_current_dataset.tracking_id,(char *)myuuid_str,CMOR_MAX_STRING);
+  free(myuuid_str);
+  uuid_destroy(myuuid);
+  strncpy(cmor_current_dataset.associated_file_name,"",CMOR_MAX_STRING);
+  for (i=0;i<12;i++) cmor_current_dataset.month_lengths[i]=0;
+  cmor_current_dataset.initiated=0;
+
+  for (i=0;i<CMOR_MAX_GRIDS;i++) {
+    strncpy(cmor_grids[i].mapping,"",CMOR_MAX_STRING);
+    cmor_grids[i].ndims=0;
+    cmor_grids[i].nattributes=0;
+    for(j=0;j<CMOR_MAX_GRID_ATTRIBUTES;j++) {
+      cmor_grids[i].attributes_values[j]=1.e20;
+      cmor_grids[i].attributes_names[j][0]='\0';
+    }
+
+    if (cmor_grids[i].lats!=NULL) free(cmor_grids[i].lats);
+    if (cmor_grids[i].lons!=NULL) free(cmor_grids[i].lons);
+    if (cmor_grids[i].blats!=NULL) free(cmor_grids[i].blats);
+    if (cmor_grids[i].blons!=NULL) free(cmor_grids[i].blons);
+/*     if (cmor_grids[i].area!=NULL) free(cmor_grids[i].area); */
+
+    cmor_grids[i].lats  = NULL;
+    cmor_grids[i].lons  = NULL;
+    cmor_grids[i].blats = NULL;
+    cmor_grids[i].blons = NULL;
+/*     cmor_grids[i].area  = NULL; */
+
+    cmor_grids[i].istimevarying=0;
+    cmor_grids[i].nvertices=0;
+
+    for (j=0;j<6;j++) cmor_grids[i].associated_variables[j]=-1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_put_nc_num_attribute(int ncid,int nc_var_id,char *name, char type, double value, char *var_name) {
+  char msg[CMOR_MAX_STRING];
+  int ierr;
+  cmor_add_traceback("cmor_put_nc_num_attribute");
+  ierr = 0;
+  if (type == 'i') {
+    ierr = nc_put_att_double(ncid,nc_var_id,name,NC_INT,1,&value);
+  }
+  else if (type == 'l') {
+    ierr = nc_put_att_double(ncid,nc_var_id,name,NC_INT,1,&value);
+  }
+  else if (type == 'f') {
+    ierr = nc_put_att_double(ncid,nc_var_id,name,NC_FLOAT,1,&value);
+  }
+  else if (type == 'd') {
+    ierr = nc_put_att_double(ncid,nc_var_id,name,NC_DOUBLE,1,&value);
+  }
+  if (ierr != NC_NOERR) {
+    snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) setting numerical attribute %s on variable (%s)",ierr,name,var_name);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  cmor_pop_traceback();
+  return ierr;
+}
+int cmor_put_nc_char_attribute(int ncid,int nc_var_id,char *name,char *value,char *var_name) {
+  int  k,ierr;
+  char msg[CMOR_MAX_STRING];
+  ierr=0;
+  cmor_add_traceback("cmor_put_nc_char_attribute");
+  k = strlen(value);
+  if (k!=0) {
+    value[k]='\0';
+    ierr = nc_put_att_text(ncid,nc_var_id,name,k+1,value);
+    if (ierr != NC_NOERR) {
+    snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) setting attribute: '%s' on variable (%s)",ierr,name,var_name);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  cmor_pop_traceback();
+  return ierr;
+}
+
+int cmor_set_cur_dataset_attribute(char *name, char *value, int optional) {
+  int i,n;
+  char msg[CMOR_MAX_STRING];
+  extern cmor_dataset_def cmor_current_dataset;
+  cmor_add_traceback("cmor_set_cur_dataset_attribute");
+  cmor_is_setup();
+  cmor_trim_string(value,msg);
+  if (strlen(name)>CMOR_MAX_STRING) {
+    snprintf(msg,CMOR_MAX_STRING,"CMOR Dataset error, %s length is greater than limit: %i", name, CMOR_MAX_STRING);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  if ((value==NULL) || (msg[0]=='\0')) {
+    if (optional==1) {
+      cmor_pop_traceback();
+      return 0;
+    }
+    else {
+      snprintf(msg,CMOR_MAX_STRING,"CMOR Dataset error, required attribute %s was not passed or blanked", name);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+  }
+  cmor_trim_string(name,msg);
+  n = cmor_current_dataset.nattributes;
+  for (i=0;i<=cmor_current_dataset.nattributes;i++) { 
+    if (strcmp(msg,cmor_current_dataset.attributes_names[i])==0) {
+      n=i;
+      cmor_current_dataset.nattributes-=1;
+      break;
+    }
+  }
+  if (n>=CMOR_MAX_ATTRIBUTES) {
+    sprintf(msg,"Setting dataset attribute: %s, we already have %i elts set which is the max, won't be set",name,CMOR_MAX_ELEMENTS);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  strncpy(cmor_current_dataset.attributes_names[n],msg,CMOR_MAX_STRING);
+  cmor_trim_string(value,msg);
+  strncpytrim(cmor_current_dataset.attributes_values[n],msg,CMOR_MAX_STRING);
+  cmor_current_dataset.nattributes+=1;
+  cmor_pop_traceback();
+  return 0;
+}
+int cmor_get_cur_dataset_attribute(char *name, char *value) {
+  int i,n;
+  char msg[CMOR_MAX_STRING];
+  extern cmor_dataset_def cmor_current_dataset;
+  cmor_add_traceback("cmor_get_cur_dataset_attribute");
+  cmor_is_setup();
+  if (strlen(name)>CMOR_MAX_STRING) {
+    snprintf(msg,CMOR_MAX_STRING,"CMOR Dataset: %s length is greater than limit: %i", name, CMOR_MAX_STRING);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  n = -1;
+  for (i=0;i<=cmor_current_dataset.nattributes;i++) { 
+    if (strcmp(name,cmor_current_dataset.attributes_names[i])==0) n=i;
+  }
+  if (n==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"CMOR Dataset: current dataset does not have attribute : %s",name);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  strncpy(value,cmor_current_dataset.attributes_values[n],CMOR_MAX_STRING);
+  cmor_pop_traceback();
+  return 0;
+}
+void cmor_has_required_global_attributes(int table_id) {
+  int i,j,n,found;
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  char expt_id[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_has_required_global_attributes");
+  if (cmor_tables[table_id].required_gbl_att[0]=='\0') {
+    cmor_pop_traceback();
+    return; /* not required */
+  }
+  cmor_get_cur_dataset_attribute("experiment_id",expt_id);
+  /* ok we want to make sure it is the sht id */
+  for (j=0;j<=cmor_tables[table_id].nexps;j++) {
+    if (strcmp(expt_id,cmor_tables[table_id].expt_ids[j])==0) {
+      strncpy(expt_id,cmor_tables[table_id].sht_expt_ids[j],CMOR_MAX_STRING);
+      break;
+    }
+  }
+
+
+  n =strlen(cmor_tables[table_id].required_gbl_att);
+
+  msg[0]='\0';
+  j=0;
+  i=0;
+  msg2[0]='\0';
+  while (i<n) {
+    while((cmor_tables[table_id].required_gbl_att[i]!=' ') && (cmor_tables[table_id].required_gbl_att[i]!='\0'))  {
+      msg[j]=cmor_tables[table_id].required_gbl_att[i];
+      msg[j+1]='\0';
+      j++;
+      i++;
+    }
+    i++;
+    found = 0 ;
+    /* for (j=0;j<=cmor_tables[table_id].nexps;j++) { */
+    /*   if (strcmp(msg,cmor_tables[table_id].sht_expt_ids[j])==0) { */
+    /* 	found = 1; */
+    /* 	break; */
+    /*   } */
+    /* } */
+
+    for (j=0;j<cmor_current_dataset.nattributes;j++) {
+      if (strcmp(msg,cmor_current_dataset.attributes_names[j])==0) {
+	cmor_get_cur_dataset_attribute(msg,ctmp);
+	if (strcmp(ctmp,"not specified")!=0) {
+	  found = 1;
+	  break;
+	}
+      }
+    }
+    /* if (found == 0) { /\* now we check if it was actually required for this exp *\/ */
+    /*   found = 1; */
+    /*   for (j=0;j<=cmor_tables[table_id].nexps;j++) { */
+    /* 	/\* msg2 is the previous keyword, i.e possible the sht_expt_id *\/ */
+    /* 	if (strcmp(msg2,expt_id)==0) { */
+    /* 	  /\* it is a match, therefore it WAS indeed required for this dataset *\/ */
+    /* 	  found = 0; */
+    /* 	  break; */
+    /* 	} */
+    /*   } */
+    /* } */
+    if (found == 0) {
+      snprintf(ctmp,CMOR_MAX_STRING,"Required global attribute %s is missing please check call to cmor_dataset",msg);
+      cmor_handle_error(ctmp,CMOR_CRITICAL);
+    }
+    strncpy(msg2,msg,CMOR_MAX_STRING);
+    j=0;
+  }
+  cmor_pop_traceback();
+  return;
+}
+
+int cmor_is_required_global_attribute(char *name, int table_id) {
+  int i,j,n,req;
+  char msg[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_is_required_global_attribute");
+  if (cmor_tables[table_id].required_gbl_att[0]=='\0') {
+    cmor_pop_traceback();
+    return 1; /* not required */
+  }
+
+  n =strlen(cmor_tables[table_id].required_gbl_att);
+
+  msg[0]='\0';
+  i=0;
+  j=0;
+  req = 1;
+  while (i<n) {
+    while((cmor_tables[table_id].required_gbl_att[i]!=' ')&&(cmor_tables[table_id].required_gbl_att[i]!='\0'))  {
+      msg[j]=cmor_tables[table_id].required_gbl_att[i];
+      msg[j+1]='\0';
+      j++;
+      i++;
+    }
+    i++;
+    j=0;
+    if (strcmp(msg,name)==0) {
+      req = 0;
+      i=n;
+    }
+  }
+  cmor_pop_traceback();
+  return req;
+}
+
+int cmor_has_cur_dataset_attribute(char *name) {
+  int i,n;
+  char msg[CMOR_MAX_STRING];
+  extern cmor_dataset_def cmor_current_dataset;
+  cmor_add_traceback("cmor_has_cur_dataset_attribute");
+  cmor_is_setup();
+  if (strlen(name)>CMOR_MAX_STRING) {
+    snprintf(msg,CMOR_MAX_STRING,"CMOR Dataset: %s length is greater than limit: %i", name, CMOR_MAX_STRING);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  n = -1;
+  for (i=0;i<=cmor_current_dataset.nattributes;i++) { 
+    if (strcmp(name,cmor_current_dataset.attributes_names[i])==0) n=i;
+  }
+  if (n==-1) {
+    cmor_pop_traceback();
+    return 1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_dataset(char *outpath, 
+		 char *experiment_id,
+		 char *institution, 
+		 char *source,   
+		 char *calendar, 
+		 int realization, 
+		 char *contact, 
+		 char *history, 
+		 char *comment, 
+		 char *references,	 
+		 int leap_year, 
+		 int leap_month, 
+		 int month_lengths[12],
+		 char *model_id,
+		 char *forcing,
+		 int initialization_method,
+		 int physics_version,
+		 char *institute_id,
+		 char *parent_experiment_id,
+		 double *branch_time)
+{
+  extern cmor_dataset_def cmor_current_dataset;
+  char msg[CMOR_MAX_STRING];
+  int i,found;
+  struct stat buf;
+
+  cmor_add_traceback("cmor_dataset");
+  cmor_is_setup();
+  strncpytrim(cmor_current_dataset.outpath,outpath,CMOR_MAX_STRING);
+  cmor_set_cur_dataset_attribute("institution",institution,0);
+
+  /* Very first thing is to make sure the output path does exist */
+  if (stat(cmor_current_dataset.outpath,&buf)==0) {
+    if (S_ISREG(buf.st_mode)!=0) {
+      sprintf(msg,"You defined your output directory to be: '%s', but it appears to be a regular file not a directory",cmor_current_dataset.outpath);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    else if (S_ISDIR(buf.st_mode)==0) {
+      sprintf(msg,"You defined your output directory to be: '%s', but it appears to be a special file not a directory",cmor_current_dataset.outpath);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    /* ok if not root then test permssions */
+    if (getuid()!=0) {
+      if (buf.st_uid == getuid()) {
+	if (!((buf.st_mode & S_IRUSR) && (buf.st_mode & S_IWUSR))) {
+	  sprintf(msg,"You defined your output directory to be: '%s', but you do not have read/write permissions on it",cmor_current_dataset.outpath);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+      else if (buf.st_gid == getgid()) {
+	if (!((buf.st_mode & S_IRGRP) && (buf.st_mode & S_IWGRP))) {
+	  sprintf(msg,"You defined your output directory to be: '%s', but you do not have read/write permissions on it",cmor_current_dataset.outpath);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      } else if (!((buf.st_mode & S_IROTH) && (buf.st_mode & S_IWOTH))) {
+	sprintf(msg,"You defined your output directory to be: '%s', but you do not have read/write permissions on it",cmor_current_dataset.outpath);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      /* /\* Ok now we need to see if we can read/write/access the directory *\/ */
+      /* if (buf.st_uid == getuid()) { */
+      /*   /\* ok user is owner of the directory *\/ */
+      /*   printf("ok you own it, flag is: %i\n */
+    }
+  }
+  else if (errno == ENOENT) {
+    sprintf(msg,"You defined your output directory to be: '%s', but this directory does not exist",cmor_current_dataset.outpath);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  else if (errno == EACCES ) {
+    sprintf(msg,"You defined your output directory to be: '%s', but we cannot access it, please check permissions",cmor_current_dataset.outpath);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  /* just to be sure initialize the dataset institude_id" */
+  if (institute_id!=NULL) {
+    cmor_trim_string(institute_id,msg);
+    if (strcmp(msg,"")==0) {
+      strcpy(msg,"not specified");
+    }
+  }
+  else {
+    strcpy(msg,"not specified");
+  }
+  cmor_set_cur_dataset_attribute("institute_id",msg,1);
+
+  cmor_set_cur_dataset_attribute("experiment_id",experiment_id,1);
+
+  /* ok we need to check it is a valid experiment have to do it at cmor_write time though*/
+  cmor_set_cur_dataset_attribute("source",source,0);  
+  cmor_set_cur_dataset_attribute("calendar",calendar,0);
+  cmor_set_cur_dataset_attribute("model_id",model_id,1);
+  cmor_set_cur_dataset_attribute("forcing",forcing,1);
+  cmor_set_cur_dataset_attribute("parent_experiment_id",parent_experiment_id,1);
+  if (branch_time == NULL) {
+    if (cmor_is_required_global_attribute("branch_time",CMOR_TABLE)==0) {
+      sprintf(msg,"You did not provide required attribute: branch_time");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else {
+    sprintf(msg,"%lf",*branch_time);
+    cmor_set_cur_dataset_attribute("branch_time",msg,1);
+  }
+
+  /* check if calendar is actually valid! */
+  found=0;
+  for (i=0;i<CMOR_N_VALID_CALS;i++) {
+    if (strcmp(calendar,CMOR_VALID_CALENDARS[i])==0) found=1;
+  }
+  if ((month_lengths!=NULL) || (leap_year!=0) || (leap_month!=0)) {
+    /* user passed calendar definitions */
+    if (found == 1 ) {
+    snprintf(msg,CMOR_MAX_STRING,"CMOR_DATASET: you passed calendar: %s therefore we will ignore any user defined value you also set for month_lentgths and leap_months", calendar);
+    cmor_handle_error(msg,CMOR_WARNING);
+  }
+    else {
+      if (strcmp(calendar,"non_standard")!=0) {
+	snprintf(msg,CMOR_MAX_STRING,"CMOR_DATASET: You defined a non_standard calendar, its name should be: 'non_standard', you passed: '%s'",calendar);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      /* dealing with user specified calendar */
+      if (month_lengths!=NULL) {
+	/* user defined months length */
+	for (i=0;i<12;i++) {
+	  if ((month_lengths[i]>50)||(month_lengths[i]<20)) {
+	    snprintf(msg,CMOR_MAX_STRING,"CMOR_DATASET: month_lengths must be between 20 and 50, index %i has value %i",i,month_lengths[i]);
+	    cmor_handle_error(msg,CMOR_WARNING);
+	  }
+	  cmor_current_dataset.month_lengths[i]=month_lengths[i];
+	}
+      }
+      if (leap_year!=0) {
+	if ((leap_month>12) || (leap_month<1)) {
+	  snprintf(msg,CMOR_MAX_STRING,"CMOR_DATASET: user defined a leap_year (%i), but an invalid corresponding leap_month (%i)",leap_year,leap_month) ;
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	  cmor_pop_traceback();
+	  return 1;
+	}
+	cmor_current_dataset.leap_year = leap_year;
+	cmor_current_dataset.leap_month = leap_month;
+      }
+      else {
+	if (leap_month!=0) {
+	  /* user defined a leap_month */
+	  if ((leap_month>12) || (leap_month<1)) {
+	    snprintf(msg,CMOR_MAX_STRING,"CMOR_DATASET: user defined an invalid leap_month (%i)",leap_month) ;
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	    cmor_pop_traceback();
+	    return 1;
+	  }
+	  /* ok here we have valid defined leap_month but no leap year */
+	  snprintf(msg,CMOR_MAX_STRING,"CMOR_DATASET: user defined a leap_month (%i), but no corresponding leap_year",leap_month) ;
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	  cmor_pop_traceback();
+	  return 1;
+	}
+      }
+    }
+  }
+  cmor_set_cur_dataset_attribute("contact",contact,1);
+  cmor_set_cur_dataset_attribute("history",history,1);
+  cmor_set_cur_dataset_attribute("comment",comment,1);
+  cmor_set_cur_dataset_attribute("references",references,1);
+  if (realization < 0) {
+    snprintf(msg,CMOR_MAX_STRING,"Error realization number is negative, expected a positive number or 0 (i.e. ignored)");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  else {
+    cmor_current_dataset.realization=realization;
+  }
+  if (initialization_method>0) {
+    sprintf(msg,"%i",initialization_method);
+    cmor_set_cur_dataset_attribute("initialization_method",msg,0);
+  }
+  else {
+    cmor_set_cur_dataset_attribute("initialization_method","1",0);
+  }
+  if (physics_version>0) {
+    sprintf(msg,"%i",physics_version);
+    cmor_set_cur_dataset_attribute("physics_version",msg,0);
+  }
+  else {
+    cmor_set_cur_dataset_attribute("physics_version","1",0);
+  }
+
+  cmor_current_dataset.initiated=1;
+  cmor_set_cur_dataset_attribute("tracking_id",cmor_current_dataset.tracking_id,0);
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_convert_string_to_list(char *invalues,char type, void **target, int *nelts) {
+  int i,j,k,itmp;
+  long l;
+  double d;
+  float f;
+  char values[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  j = 1;
+  cmor_add_traceback("cmor_convert_string_to_list");
+  /* trim this so no extra spaces after or before */
+  strncpytrim(values,invalues,CMOR_MAX_STRING);
+  k=1; /* 1 means we are on characters */
+  for (i=0;i<strlen(values);i++) {
+    if (values[i]==' ') {
+      if (k==1) {
+	j++;
+	k=0;
+      }
+      while (values[i+1]==' ') i++;
+    }
+    else {
+      k=1;
+    }
+  }
+  *nelts =j;
+
+  if (type == 'i' ) *target = malloc(j*sizeof(int));
+  else if (type == 'f') *target = malloc(j*sizeof(float));
+  else if (type == 'l') *target = malloc(j*sizeof(long));
+  else if (type == 'd') *target = malloc(j*sizeof(double));
+  else if (type == 'c') *target = (char **) malloc(j*sizeof(char *));
+  else {
+    snprintf(msg, CMOR_MAX_STRING,"unknown conversion '%c' for list: %s",type,values);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  if (*target==NULL) {
+    snprintf(msg, CMOR_MAX_STRING,"mallocing '%c' for list: %s",type,values);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  j=0;
+  msg[0]='\0';
+  k=0;
+  itmp=1;
+  for (i=0;i<strlen(values);i++) {
+    if (values[i]==' ') { /* ok next world */
+      if (itmp==1) {
+	itmp = 0 ;
+	msg[i-k]='\0';
+	strncpytrim(msg2,msg,CMOR_MAX_STRING);
+	if (type=='i') {
+	  sscanf(msg2,"%d",&itmp);
+	  ((int *)*target)[j] = (int)itmp;
+	}
+	else if (type=='l') {
+	  sscanf(msg2,"%ld",&l);
+	  ((long *)*target)[j] = (long)l;
+	}
+	else if (type=='f') {
+	  sscanf(msg2,"%f",&f);
+	  ((float *)*target)[j] = (float)f;
+	}
+	else if (type=='d') {
+	  sscanf(msg2,"%lf",&d);
+	  ((double *)*target)[j] = (double)d;
+	}
+	else if (type=='c') {
+	  ((char **)*target)[j]=(char *)malloc(13*sizeof(char));
+	  strncpy(((char **)*target)[j],msg2,12);
+	}
+	j++;
+      }
+      while(values[i+1]==' ') i++;
+      k=i+1;
+    }
+    else {
+      msg[i-k]=values[i];
+      itmp=1;
+    }
+  }
+  /* ok now the last one */
+  msg[i-k]='\0';
+
+  strncpytrim(msg2,msg,CMOR_MAX_STRING);
+  if (type=='i') {
+    sscanf(msg2,"%d",&itmp);
+    ((int *)*target)[j] = (int)itmp;
+  }
+  else if (type=='l') {
+    sscanf(msg2,"%ld",&l);
+    ((long *)*target)[j] = (long)l;
+  }
+  else if (type=='f') {
+    sscanf(msg2,"%f",&f);
+    ((float *)*target)[j] = (float)f;
+  }
+  else if (type=='d') {
+    sscanf(msg2,"%lf",&d);
+    ((double *)*target)[j] = (double)d;
+  }
+  else if (type=='c') {
+    ((char **)*target)[j] = (char *)malloc(13*sizeof(char));
+    strncpy(((char **)*target)[j],msg2,12);
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_define_zfactors_vars(int var_id,int ncid, int *nc_dim,char *formula_terms,int *nzfactors, int *zfactors, int *nc_zfactors,int i,int dim_bnds)
+{
+  char msg[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  int ierr=0,l,m,k,n,j,m2,found,nelts,*int_list=NULL;
+  int dim_holder[CMOR_MAX_VARIABLES];
+  int lnzfactors;
+  int ics,icd,icdl,ia;
+
+  cmor_add_traceback("cmor_define_zfactors_vars");
+  cmor_is_setup();
+  lnzfactors = *nzfactors;
+  /* now figures out the variables for z_factor and loops thru it*/
+  n = strlen(formula_terms);
+  for (j=0;j<n;j++) {
+    while((formula_terms[j]!=':') && (j<n)) {j++;}
+    /* at this point we skiped the name thingy */
+    j++;
+    while(formula_terms[j]==' ') {j++;} /* ok we skipped the blanks as well */
+    /* ok now we can start scanning the zvar name */
+    k=j;
+    while((formula_terms[j]!=' ')&&(formula_terms[j]!='\0')) {ctmp[j-k]=formula_terms[j];j++;} 
+    /* all right here we reach a  blank, the name is finsihed */
+    ctmp[j-k]='\0';
+    /* here we try to match with the actual variable */
+    l=-1;
+    for (k=0;k<cmor_nvars+1;k++) {
+        /* printf("checking: %s vs %s\n",ctmp,cmor_vars[k].id); */
+      if (strcmp(ctmp,cmor_vars[k].id)==0) {
+	/* ok that is not enough! We need to know if the dims match! */
+	nelts=0;
+	for (m=0;m<cmor_vars[k].ndims;m++) {
+	  for (m2=0;m2<cmor_vars[var_id].ndims;m2++) {
+	    if (cmor_vars[k].axes_ids[m]==cmor_vars[var_id].axes_ids[m2]) {
+	      nelts+=1;
+	      break;
+	    }
+	  }
+	}
+	if (nelts == cmor_vars[k].ndims) {
+	  l=k;
+	  break;
+	}
+      }
+    }
+    if (l==-1) {
+      /* ok this looks bad! last hope is that the zfactor is actually a coordinate! */
+      found = 0;
+      for (m=0;m<cmor_vars[var_id].ndims;m++) {
+	if (strcmp(cmor_axes[cmor_vars[var_id].axes_ids[m]].id,ctmp)==0) {
+	  found = 1;
+	  break;
+	}
+	if (cmor_axes[cmor_vars[var_id].axes_ids[m]].bounds!=NULL) { /* ok this axes has bounds let's check against his name + _bnds then */
+	  sprintf(msg,"%s_bnds",cmor_axes[cmor_vars[var_id].axes_ids[m]].id);
+	  if (strcmp(msg,ctmp)==0) {
+	    found=1;
+	    break;
+	  }
+	}
+      }
+      if (found==0) {
+	snprintf(msg,CMOR_MAX_STRING,"could not find the zfactor variable: %s, please define it first",ctmp);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+	cmor_pop_traceback();
+	return 1;
+      }
+    }
+    else {
+      found=0;
+    }
+    /*now figure out if we already defined this zfactor var */
+    for(k=0;k<lnzfactors;k++) if (zfactors[k]==l) found=1;
+    if (found==0) {
+      /* ok it is a new one */
+      zfactors[lnzfactors]=l;
+      /* ok we need to figure out the dimensions of that zfactor */
+      /* and then define the variable */
+      for(k=0;k<cmor_vars[l].ndims;k++) {
+	found = 0;
+	/* printf("checking for axis: %s on var: %i, %s\n",cmor_axes[cmor_vars[l].axes_ids[k]].id,l,cmor_vars[l].id); */
+	for (m=0;m<cmor_vars[var_id].ndims;m++) {
+	  if (strcmp(cmor_axes[cmor_vars[var_id].axes_ids[m]].id,cmor_axes[cmor_vars[l].axes_ids[k]].id)==0) {
+	    found =1;
+	    dim_holder[k]=nc_dim[m];
+	    /* ok here we mark this factor has time varying if necessary so that we can count the number of time written and make sure it matches the variable */
+	    if (cmor_axes[cmor_vars[var_id].axes_ids[m]].axis=='T') {
+	      for (ia=0;ia<10;ia++) {
+		if (cmor_vars[var_id].associated_ids[ia]==-1) {
+		  cmor_vars[var_id].associated_ids[ia]=l;
+		  break;
+		}
+	      }
+	    }
+	    break;
+	  }
+	}
+	if (found==0) {
+	  snprintf(msg,CMOR_MAX_STRING,"variable \"%s\" has axis \"%s\" defined with formula terms, but term \"%s\" depends on axis \"%s\" which is not part of the variable",cmor_vars[var_id].id,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,ctmp,cmor_axes[cmor_vars[l].axes_ids[k]].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+      /* at that point we can define the var */
+      if (dim_bnds==-1) { /* we are not defining a bnds one */
+	if (cmor_vars[l].type == 'd') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_DOUBLE,cmor_vars[l].ndims,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	else if (cmor_vars[l].type == 'f') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_FLOAT,cmor_vars[l].ndims,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	else if (cmor_vars[l].type == 'l') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_INT,cmor_vars[l].ndims,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	else if (cmor_vars[l].type == 'i') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_INT,cmor_vars[l].ndims,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING, "NC Error (%i) for variable %s error defining zfactor var: %i (%s)",ierr,cmor_vars[var_id].id,lnzfactors,cmor_vars[l].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+	/* Compression stuff */
+	if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+	  if (cmor_vars[l].ndims>0) {
+	    ics = cmor_tables[cmor_vars[l].ref_table_id].vars[cmor_vars[l].ref_var_id].shuffle;
+	    icd = cmor_tables[cmor_vars[l].ref_table_id].vars[cmor_vars[l].ref_var_id].deflate;
+	    icdl = cmor_tables[cmor_vars[l].ref_table_id].vars[cmor_vars[l].ref_var_id].deflate_level;
+	    ierr = nc_def_var_deflate(ncid,nc_zfactors[lnzfactors],ics,icd,icdl);
+	    if (ierr != NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for zfactor variable %s for variable '%s'",ierr,cmor_vars[l].id,cmor_vars[var_id].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	  }
+	}
+
+/* 	printf("defined variable %s to nc_var_id: %i\n",cmor_vars[l].id,nc_zfactors[lnzfactors]); */
+
+	/* Creates attribute related to that variable */
+	for (k=0;k<cmor_vars[l].nattributes;k++){
+	  if (strcmp(cmor_vars[l].attributes[k],"flag_values")==0) {
+	    /* ok we need to convert the string to a list of int */
+	    ierr = cmor_convert_string_to_list(cmor_vars[l].attributes_values_char[k],'i',(void *)&int_list,&nelts);
+	    ierr = nc_put_att_int(ncid,nc_zfactors[lnzfactors] ,"flag_values",NC_INT,nelts,int_list);
+	    if (ierr != NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) setting flags numerical attribute on variable",ierr);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    free(int_list);
+	  }
+	  else if (cmor_vars[l].attributes_type[k] == 'c') {
+	    ierr = cmor_put_nc_char_attribute(ncid,nc_zfactors[lnzfactors],cmor_vars[l].attributes[k],cmor_vars[l].attributes_values_char[k],cmor_vars[l].id) ;
+	  }
+	  else {
+	    ierr = cmor_put_nc_num_attribute(ncid,nc_zfactors[lnzfactors],cmor_vars[l].attributes[k],cmor_vars[l].attributes_type[k],cmor_vars[l].attributes_values_num[k],cmor_vars[l].id);
+	  }
+	}
+	lnzfactors+=1;
+      }
+      else {
+	/* ok now we need to see if we have bounds on that variable */
+	/* 	strncpy(msg,cmor_vars[l].id,CMOR_MAX_STRING); */
+	/* 	strncat(msg,"_bnds",CMOR_MAX_STRING); */
+	dim_holder[cmor_vars[l].ndims]=dim_bnds;
+	if (cmor_vars[l].type == 'd') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_DOUBLE,cmor_vars[l].ndims+1,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	else if (cmor_vars[l].type == 'f') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_FLOAT,cmor_vars[l].ndims+1,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	else if (cmor_vars[l].type == 'l') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_INT,cmor_vars[l].ndims+1,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	else if (cmor_vars[l].type == 'i') ierr = nc_def_var(ncid,cmor_vars[l].id,NC_INT,cmor_vars[l].ndims+1,&dim_holder[0],&nc_zfactors[lnzfactors]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NC Error (%i) for variable %s error defining zfactor var: %i (%s)",ierr,cmor_vars[var_id].id,lnzfactors,cmor_vars[l].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+
+	/* Compression stuff */
+	if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+	  ics = cmor_tables[cmor_vars[l].ref_table_id].vars[cmor_vars[l].ref_var_id].shuffle;
+	  icd = cmor_tables[cmor_vars[l].ref_table_id].vars[cmor_vars[l].ref_var_id].deflate;
+	  icdl = cmor_tables[cmor_vars[l].ref_table_id].vars[cmor_vars[l].ref_var_id].deflate_level;
+	  ierr = nc_def_var_deflate(ncid,nc_zfactors[lnzfactors],ics,icd,icdl);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for zfactor variable %s for variable '%s'",ierr,cmor_vars[l].id,cmor_vars[var_id].id);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+
+	/* Creates attribute related to that variable */
+	for (k=0;k<cmor_vars[l].nattributes;k++){
+	  if (strcmp(cmor_vars[l].attributes[k],"flag_values")==0) {
+	    /* ok we need to convert the string to a list of int */
+	    ierr = cmor_convert_string_to_list(cmor_vars[l].attributes_values_char[k],'i',(void *)&int_list,&nelts);
+	    ierr = nc_put_att_int(ncid,nc_zfactors[lnzfactors] ,"flag_values",NC_INT,nelts,int_list);
+	    if (ierr != NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) setting flags numerical attribute on variable",ierr);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    free(int_list);
+	  }
+	  else if (cmor_vars[l].attributes_type[k] == 'c') {
+	    ierr = cmor_put_nc_char_attribute(ncid,nc_zfactors[lnzfactors],cmor_vars[l].attributes[k],cmor_vars[l].attributes_values_char[k],cmor_vars[l].id) ;
+	  }
+	  else {
+	    ierr = cmor_put_nc_num_attribute(ncid,nc_zfactors[lnzfactors],cmor_vars[l].attributes[k],cmor_vars[l].attributes_type[k],cmor_vars[l].attributes_values_num[k],cmor_vars[l].id);
+	  }
+	}
+
+	lnzfactors+=1;
+      }
+    }
+    
+    while((formula_terms[j]==' ')&&(formula_terms[j]!='\0')) {j++;} /* skip the other whites */
+  }
+  *nzfactors=lnzfactors;
+  cmor_pop_traceback();
+  return 0;
+}
+
+
+void cmor_flip_hybrid(int var_id, int i,char *a, char *b, char *abnds, char *bbnds) {
+  int doflip,j,k,l=0;
+  double tmp;
+  extern cmor_var_t cmor_vars[CMOR_MAX_VARIABLES];
+  extern cmor_axis_t cmor_axes[CMOR_MAX_AXES];
+  cmor_add_traceback("cmor_flip_hybrid");
+  /* here we need to look and see if we need to flip the levels again since we overwrote this stuff */
+
+  doflip=0;
+  if (cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_axis_id].stored_direction=='d') {
+    /* decrease stuff */
+    if (cmor_axes[cmor_vars[var_id].axes_ids[i]].values[1]>cmor_axes[cmor_vars[var_id].axes_ids[i]].values[0]) doflip = 1;
+  }
+  else {
+    if (cmor_axes[cmor_vars[var_id].axes_ids[i]].values[1]<cmor_axes[cmor_vars[var_id].axes_ids[i]].values[0]) doflip = 1;
+  }
+  if (doflip==1) {
+    /* look for a coeff */
+    k=-1;
+    for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,a)==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+    /* look for b coeff */
+    if (b!=NULL) {
+      l=-1;
+      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,b)==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { l=j; break;}
+    }
+    for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length/2;j++) {
+      tmp = cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j];
+      cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]=cmor_axes[cmor_vars[var_id].axes_ids[i]].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length-1-j];
+      cmor_axes[cmor_vars[var_id].axes_ids[i]].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length-1-j]=tmp;
+      tmp = cmor_vars[k].values[j];
+      cmor_vars[k].values[j] = cmor_vars[k].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length-1-j];
+      cmor_vars[k].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length-1-j]=tmp;
+      if (b!=NULL) {
+	tmp = cmor_vars[l].values[j];
+	cmor_vars[l].values[j] = cmor_vars[l].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length-1-j];
+	cmor_vars[l].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length-1-j]=tmp;
+      }
+    }
+    if (cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds!=NULL) {
+      k=-1;
+      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,abnds)==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+      if (bbnds!=NULL) {
+	l=-1;
+	for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,bbnds)==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { l=j; break;}
+      }
+      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) {
+	tmp = cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j];
+	cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j]=cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2-1-j];
+	cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2-1-j]=tmp;
+	tmp = cmor_vars[k].values[j];
+	cmor_vars[k].values[j] = cmor_vars[k].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2-1-j];
+	cmor_vars[k].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2-1-j]=tmp;
+	if (bbnds!=NULL) {
+	  tmp = cmor_vars[l].values[j];
+	  cmor_vars[l].values[j] = cmor_vars[l].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2-1-j];
+	  cmor_vars[l].values[cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2-1-j]=tmp;
+	}
+      }
+    }
+  }
+  cmor_pop_traceback();
+  return;
+}
+
+int cmor_write(int var_id,void *data, char type, char *suffix, int ntimes_passed, double *time_vals, double *time_bounds, int *refvar) 
+{
+  extern cmor_var_t cmor_vars[CMOR_MAX_VARIABLES];
+  extern cmor_axis_t cmor_axes[CMOR_MAX_AXES];
+  extern int cmor_nvars;
+  extern cmor_dataset_def cmor_current_dataset;
+
+  int i,j,k,ierr=0,ncid,n,l,m,ncafid,m2[5];
+  size_t nctmp;
+  char outname[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  char ctmp2[CMOR_MAX_STRING];
+  char ctmp3[CMOR_MAX_STRING];
+  char ctmp4[CMOR_MAX_STRING];
+  char ctmp5[CMOR_MAX_STRING];
+  char ctmp6[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  char appending_to[CMOR_MAX_STRING];
+  int nc_dim[CMOR_MAX_AXES];
+  size_t nc_dim_chunking[CMOR_MAX_AXES];
+  int tmp_dims[2];
+  size_t starts[2],counts[2];
+  int nc_dim_af[CMOR_MAX_AXES];
+  int nc_vars[CMOR_MAX_VARIABLES];
+  int nc_vars_af[CMOR_MAX_VARIABLES];
+  int nc_associated_vars[6];
+  int nc_dims_associated[CMOR_MAX_AXES];
+  int nc_bnds_vars[CMOR_MAX_VARIABLES];
+  int cmode;
+  int dim_bnds;
+  int dims_bnds_ids[2];
+  int nc_singletons[CMOR_MAX_DIMENSIONS];
+  int nc_singletons_bnds[CMOR_MAX_DIMENSIONS];
+  char mtype;
+  int nzfactors=0;
+  int zfactors[CMOR_MAX_VARIABLES];
+  int nc_zfactors[CMOR_MAX_VARIABLES];
+  int varid;
+  int ho;
+  double tmps[2];
+  FILE *fperr;
+  struct tm *ptr;
+  time_t lt;
+  float afloat,d;
+  int ics,icd,icdl,itmpmsg,itmp2,itmp3, *int_list=NULL,nelts;
+  int isfixed=0;
+  int origRealization=0;
+  uuid_t *myuuid;
+  uuid_fmt_t fmt;
+  void *myuuid_str=NULL;
+  size_t uuidlen;
+  extern int cmor_convert_char_to_hyphen(char c);
+
+  cmor_add_traceback("cmor_write");
+
+  strcpy(appending_to,""); /* initialize to nothing */
+  strcpy(outname,"");
+  strcpy(ctmp,"");
+  strcpy(msg,"");
+  strcpy(ctmp2,"");
+
+  cmor_is_setup();
+  if (var_id>cmor_nvars) {
+    cmor_handle_error("var_id %i not defined",CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return -1;
+  };
+  varid = var_id;
+
+  /* here we check that the variable actually has all the required attributes set */
+  cmor_has_required_variable_attributes(varid);
+  if (refvar!=NULL) {
+    varid=(int) *refvar;
+/*     printf("ok passing with a refvar: %i\n",varid); */
+    if (cmor_vars[varid].initialized==-1) {
+      snprintf(msg,CMOR_MAX_STRING, "You are trying to write variable \"%s\" in association with variable \"%s\" but you you need to write the associated variable first in order to initialize the file and dimensinos",cmor_vars[varid].id,cmor_vars[var_id].id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    /* ok now we need to scan the netcdf file to figure the ncvarid associated */
+    ierr = nc_inq_varid(cmor_vars[varid].initialized,cmor_vars[var_id].id,&cmor_vars[var_id].nc_var_id);
+    if (ierr!=NC_NOERR) {
+      sprintf(msg,"Could not find variable: '%s' in file of associated variable: '%s'",cmor_vars[var_id].id,cmor_vars[*refvar].id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    cmor_vars[var_id].ntimes_written = cmor_vars[varid].ntimes_written - ntimes_passed;
+  }
+
+  /* Here we check that the types are consitent between the missing value passed and the type passed now */
+  if (cmor_vars[varid].nomissing==0) {
+    if (cmor_vars[varid].itype!=type) {
+      snprintf(msg,CMOR_MAX_STRING,"You defined variable \"%s\" with a missing value of type \"%c\", but you are now writing data of type: \"%c\" this may lead to some spurious handling of the missing values",cmor_vars[varid].id,cmor_vars[varid].itype,type);
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+  }
+  if (cmor_vars[varid].initialized==-1) { /* Variable never been thru cmor_write, we need to define everything */
+
+    if (cmor_vars[varid].type!=type) {
+      snprintf(msg,CMOR_MAX_STRING,"Converted type from '%c' to '%c'",type,cmor_vars[varid].type);
+      cmor_update_history(varid,msg);
+    }
+
+
+    if (cmor_has_cur_dataset_attribute("forcing")==0) {
+      cmor_get_cur_dataset_attribute("forcing",ctmp2);
+      cmor_check_forcing_validity(cmor_vars[var_id].ref_table_id,ctmp2);
+    }
+
+    /* need to store the prodcut type */
+    strncpy(ctmp2,cmor_tables[cmor_vars[var_id].ref_table_id].product,CMOR_MAX_STRING);
+    cmor_set_cur_dataset_attribute("product",ctmp2,1);
+
+    /* we will need the expt_id for the filename so we check its validity here */
+    cmor_get_cur_dataset_attribute("experiment_id",ctmp2);
+    /* ok here we check the exptid is ok */
+    if (cmor_check_expt_id(ctmp2,cmor_vars[var_id].ref_table_id,"experiment","experiment_id")!=0) {
+      snprintf(msg,CMOR_MAX_STRING,"Invalid dataset experiment id: %s, check against table: %s",ctmp2,cmor_tables[cmor_vars[var_id].ref_table_id].table_id);
+      cmor_handle_error(msg,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    strcpy(ctmp4,ctmp2); /*copy the expid for later use with gridspec files etc */
+    /* here we test to see if the user passed a suffix and this suffix points to a file and if we are in append mode */
+    if (suffix!=NULL) {
+      strncpytrim(appending_to,suffix,CMOR_MAX_STRING);
+      if (strncmp(appending_to,"",CMOR_MAX_STRING)!=0) {
+	if ((CMOR_NETCDF_MODE == CMOR_APPEND_4) ||(CMOR_NETCDF_MODE == CMOR_APPEND_3)) {
+	  fperr = NULL;
+	  fperr=fopen(appending_to,"r"); /*ok is the suffix a real suffix or a file name? */
+	  if ( fperr != NULL) { /* file exists we are appending to tihs */
+	    fclose(fperr);
+	  }
+	  else { /* file does not exists it is a suffix */
+	    /* we need to check if the CMOR table used is not for a cmor 2 */
+	    if (cmor_tables[cmor_vars[var_id].ref_table_id].cmor_version>=2.) {
+	      sprintf(msg,"You passed '%s' as file_suffix, suffix are not allowed in CMOR2.0 and newer. Were you trying to append to a non-existing file?",appending_to);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    else {
+	      strcpy(appending_to,"");
+	    }
+	  }
+	}
+	else {
+	  /* we need to check if the CMOR table used is not for a cmor 2 */
+	  if (cmor_tables[cmor_vars[var_id].ref_table_id].cmor_version>=2.) {
+	    sprintf(msg,"Suffix are not allowed in CMOR 2.0 and greater");
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	  else {
+	    strcpy(appending_to,"");
+	  }
+	}
+      }
+    }
+	
+
+    /* Figures out file name */
+    if (CMOR_CREATE_SUBDIRECTORIES == 1) {
+      isfixed = cmor_create_output_path(var_id,outname);
+    }
+    else {
+      strncpytrim(outname,cmor_current_dataset.outpath,CMOR_MAX_STRING);
+    }
+    strncat(outname,"/",CMOR_MAX_STRING-strlen(outname));
+    for (i=0;i<strlen(cmor_vars[var_id].id);i++) {
+      if ((cmor_vars[var_id].id[i]=='_')||(cmor_vars[var_id].id[i]=='-')) {
+	snprintf(outname,CMOR_MAX_STRING,"var_id cannot contain %c you passed: %s. Please check your input tables\n",cmor_vars[var_id].id[i],cmor_vars[var_id].id);
+	cmor_handle_error(outname,CMOR_CRITICAL);
+      }
+    }
+    strncattrim(outname,cmor_vars[var_id].id,CMOR_MAX_STRING-strlen(outname));
+    strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+    strncattrim(outname,cmor_tables[cmor_vars[var_id].ref_table_id].table_id,CMOR_MAX_STRING-strlen(outname));
+    if ( cmor_has_cur_dataset_attribute("model_id")==0) {
+      cmor_get_cur_dataset_attribute("model_id",msg);
+      strcpy(ctmp5,msg);
+      for (i=0;i<strlen(msg);i++) {
+	if (cmor_convert_char_to_hyphen(msg[i])==1) {
+	  snprintf(ctmp6,CMOR_MAX_STRING,"model_id (%s) contains the character '%c' it will be replaced with a hyphen\n",msg,msg[i]);
+	  cmor_handle_error(ctmp6,CMOR_WARNING);
+	  ctmp5[i]='-';
+	}
+      }
+      /* removes trailing "-" */
+      for (i=strlen(ctmp5)-1;i>0;i--) {
+	if (ctmp5[i]=='-') {
+	  ctmp5[i]='\0';
+	}
+	else {
+	  break;
+	}
+      }
+      strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+      strncat(outname,ctmp5,CMOR_MAX_STRING-strlen(outname));
+    }
+    if ( strcmp(ctmp2,"")!=0) { /* we have a short name for the expt_id */
+      strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+      strncat(outname,ctmp2,CMOR_MAX_STRING-strlen(outname));
+    }
+    strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+
+    /* is it a fixed field ? */
+    if (isfixed==1) {
+      strncat(outname,"r0i0p0",CMOR_MAX_STRING-strlen(outname) );
+      origRealization = cmor_current_dataset.realization;
+      cmor_current_dataset.realization=0;
+      cmor_set_cur_dataset_attribute("physics_version","0",0);
+      cmor_set_cur_dataset_attribute("initialization_method","0",0);
+    }
+    else {
+      snprintf(msg,CMOR_MAX_STRING,"r%d",cmor_current_dataset.realization);
+      strncat(outname,msg,CMOR_MAX_STRING-strlen(outname) );
+      
+      /* initialization id (optional) */
+      if ( cmor_has_cur_dataset_attribute("initialization_method")==0) {
+	cmor_get_cur_dataset_attribute("initialization_method",ctmp2);
+	sscanf(ctmp2,"%i",&j);
+	snprintf(msg,CMOR_MAX_STRING,"i%d",j);
+	strncat(outname,msg,CMOR_MAX_STRING-strlen(outname) );
+      }
+      
+      /* physics id (optional) */
+      if ( cmor_has_cur_dataset_attribute("physics_version")==0) {
+	cmor_get_cur_dataset_attribute("physics_version",ctmp2);
+	sscanf(ctmp2,"%i",&j);
+	snprintf(msg,CMOR_MAX_STRING,"p%d",j);
+	strncat(outname,msg,CMOR_MAX_STRING-strlen(outname) );
+      }
+    }
+
+    strncpytrim(cmor_vars[var_id].base_path,outname,CMOR_MAX_STRING);
+    if (strcmp(appending_to,"")!=0) { /* we are appending to an existing file */
+      k = strlen(appending_to); /* what's the length of that file name */
+      j=0;
+      for (i=k-1;i>=0;i--) {
+	if (appending_to[i]=='/') {/* ok this marks the beg of the actual file name */
+	  j=i+1;
+	  break;
+	}
+      }
+      /* now does the same thing for "_" this should mark our suffix section */
+      /* we need to count how many are there and the index of the last one */
+      l=0;
+      for (i=k-1;i>=j;i--) {
+	if (appending_to[i]=='_') {/* ok this marks the beg of the actual suffix */
+	  l++;
+	}
+      }
+      if ( cmor_has_cur_dataset_attribute("model_id")==0) {
+	i=5;
+      }
+      else {
+	i=4;
+      }
+      if (l>i) {
+	/* we have extra _ that means suffix */
+	for (i=k-1;i>=j;i--) {
+	  if (appending_to[i]=='_') {/* ok this marks the beg of the actual suffix */
+	    l=i+1;
+	    break;
+	  }
+	}
+	for(i=l;i<k-3;i++) {
+	  msg[i-l]=appending_to[i];
+	}
+	msg[i-l]='\0'; /*termination char */
+      }
+      else {
+	msg[0]='\0';
+      }
+    }
+    else { /*ok let's copy the suffix to msg */
+      if (suffix!=NULL) strncpytrim(msg,suffix,CMOR_MAX_STRING);
+      else msg[0]='\0';
+    }
+    if (msg[0]!='\0') {
+      /* test for "_" in suffix , it s not allowed */
+      for (i=0;i<strlen(msg);i++) {
+	if (msg[i]=='_') {
+	  if ((CMOR_NETCDF_MODE == CMOR_APPEND_4) ||(CMOR_NETCDF_MODE == CMOR_APPEND_3)) {
+	    snprintf(ctmp2,CMOR_MAX_STRING,"suffix cannot contain the '_' character, you passed: %s Is it possible you are trying to append to a file and the file is not exactly here?",msg);
+	    cmor_handle_error(ctmp2,CMOR_CRITICAL);
+	  }
+	  else {
+	    snprintf(ctmp2,CMOR_MAX_STRING,"suffix cannot contain the '_' character, you passed: %s",msg);
+	    cmor_handle_error(ctmp2,CMOR_CRITICAL);
+	  }
+	}
+      }
+      strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+      strncat(outname,msg,CMOR_MAX_STRING-strlen(outname));
+      strncpy(cmor_vars[var_id].suffix,msg,CMOR_MAX_STRING);
+    }
+    strncat(outname,".nc",CMOR_MAX_STRING-strlen(outname) );
+
+    /* at this point we need to rename the original file name to this so that the rest of the code works */
+    if (appending_to[0]!='\0') {
+      if (strncmp(outname,appending_to,CMOR_MAX_STRING)!=0) {
+	if (rename(appending_to,outname)!=0) {
+	  snprintf(msg,CMOR_MAX_STRING,"could not rename your existing file: %s to temporary file: %s",appending_to,outname);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+      snprintf(msg,CMOR_MAX_STRING,"Appended to original file: %s",appending_to);
+      cmor_update_history(var_id,msg);
+    }
+
+    strncpytrim(cmor_vars[var_id].current_path,outname,CMOR_MAX_STRING);
+    /* Decides NetCDF mode */
+    if (USE_NETCDF_4 == 1) {
+      cmode = NC_NETCDF4 | NC_CLASSIC_MODEL;
+      if ((CMOR_NETCDF_MODE == CMOR_REPLACE_3) ||(CMOR_NETCDF_MODE == CMOR_PRESERVE_3) ||(CMOR_NETCDF_MODE == CMOR_APPEND_3)) {
+	cmode = NC_CLOBBER;
+      }
+    }
+    else {
+      cmode = NC_CLOBBER;
+    }
+
+    if ((CMOR_NETCDF_MODE == CMOR_REPLACE_4) || (CMOR_NETCDF_MODE == CMOR_REPLACE_3)) {
+      ierr = nc_create(outname,NC_CLOBBER|cmode,&ncid);
+    }
+    else if ((CMOR_NETCDF_MODE == CMOR_PRESERVE_4) || (CMOR_NETCDF_MODE == CMOR_PRESERVE_3)) {
+     /* ok first let's check if the file does exists or not */
+      fperr = NULL;
+      fperr=fopen(outname,"r");
+      if ( fperr != NULL) {
+	snprintf(msg,CMOR_MAX_STRING,"Output file ( %s ) already exists, remove file or use CMOR_REPLACE or CMOR_APPEND for CMOR_NETCDF_MODE value in cmor_setup",outname);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      ierr = nc_create(outname,NC_NOCLOBBER|cmode,&ncid); 
+    }
+    else if ((CMOR_NETCDF_MODE == CMOR_APPEND_4) || (CMOR_NETCDF_MODE == CMOR_APPEND_3)) {
+      /* ok first let's check if the file does exists or not */
+      fperr = NULL;
+      fperr = fopen(outname,"r");
+      if (fperr == NULL) {
+	/* ok it does not exists... we will open as new */
+	ierr = nc_create(outname,NC_CLOBBER|cmode,&ncid);
+      }
+      else { /*ok it was there already */
+	ierr = fclose(fperr);
+	/*cmor_vars[var_id].suffix_has_date=1;*/
+	ierr = nc_open(outname,NC_WRITE,&ncid);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) opening file: %s",ierr,outname); cmor_handle_error(msg,CMOR_CRITICAL);}
+	ierr = nc_inq_dimid(ncid,"time",&i);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) looking for time dimension in file: %s",ierr,outname); cmor_handle_error(msg,CMOR_CRITICAL);}
+	ierr = nc_inq_dimlen(ncid,i,&nctmp);
+	cmor_vars[var_id].ntimes_written=(int)nctmp;
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) looking for time dimension length in file: %s",ierr,outname); cmor_handle_error(msg,CMOR_CRITICAL);}
+	ierr = nc_inq_varid(ncid,cmor_vars[var_id].id,&cmor_vars[var_id].nc_var_id);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) looking for variable '%s' in file: %s",ierr,cmor_vars[var_id].id,outname); cmor_handle_error(msg,CMOR_CRITICAL);}
+	ierr = nc_inq_varid(ncid,"time",&cmor_vars[var_id].time_nc_id);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) looking for time of variable '%s' in file: %s",ierr,cmor_vars[var_id].id,outname); cmor_handle_error(msg,CMOR_CRITICAL);}
+	/* ok now we need to read the first time in here */
+	starts[0]=0;
+	ierr = nc_get_var1_double(ncid,cmor_vars[var_id].time_nc_id,&starts[0],&cmor_vars[var_id].first_time);
+        starts[0]=cmor_vars[var_id].ntimes_written-1;
+        ierr = nc_get_var1_double(ncid,cmor_vars[var_id].time_nc_id,&starts[0],&cmor_vars[var_id].last_time);
+	ierr = nc_inq_varid(ncid,"time_bnds",&i);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) looking for time bounds of variable '%s' in file: %s",ierr,cmor_vars[var_id].id,outname);
+	  cmor_handle_error(msg,CMOR_WARNING);
+	  ierr = NC_NOERR;
+	}
+	else {
+	  cmor_vars[var_id].time_bnds_nc_id=i;
+	}
+	cmor_vars[var_id].initialized=ncid;
+      }
+    }
+    else {
+      snprintf(msg,CMOR_MAX_STRING,"Unknown CMOR_NETCDF_MODE file mode: %i",CMOR_NETCDF_MODE);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) creating file: %s",ierr,outname); cmor_handle_error(msg,CMOR_CRITICAL);}
+  }
+  /* we closed and reopened the same test, in case we were appending, in which case all decalration have been done if the open loop */
+  if (cmor_vars[varid].initialized==-1) { /* Variable never been thru cmor_write, we need to define everything */
+    /* define global attributes */
+    if (cmor_current_dataset.initiated==0) {
+      snprintf(msg,CMOR_MAX_STRING, "you need to initialize the dataset by calling cmor_dataset before calling cmor_write");
+      cmor_handle_error(msg,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+
+    cleanup_varid = var_id;
+
+    /* Do we need to create the associated file or not ? */
+/*     if (cmor_current_dataset.associate_file == 1) {     */
+/*       if (cmor_current_dataset.associate_file == -1) { */
+/* 	/\* Creates the associated file *\/ */
+/* 	strncpytrim(cmor_current_dataset.associated_file_name,cmor_current_dataset.outpath,CMOR_MAX_STRING); */
+/* 	strncat(cmor_current_dataset.associated_file_name,"/metadata_file.nc",CMOR_MAX_STRING-strlen(cmor_current_dataset.associated_file_name)); */
+/* 	ierr = nc_create(cmor_current_dataset.associated_file_name,cmode,&cmor_current_dataset.associate_file); */
+/* 	if (ierr != NC_NOERR) { */
+/* 	  snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) creating metadata file: %s",ierr,cmor_current_dataset.associated_file_name);  */
+/* 	  cmor_handle_error(msg,CMOR_CRITICAL); */
+/* 	} */
+/*       } */
+/*       ncafid = cmor_current_dataset.associate_file; */
+/*       cmor_set_variable_attribute(var_id,"associated_files",'c',cmor_current_dataset.associated_file_name); */
+/*     } */
+/*     else { */
+/*       ncafid = ncid; */
+/*       cmor_set_variable_attribute(var_id,"associated_files",'c',"self"); */
+/*     } */
+    ncafid = ncid;
+    /* Ok we need to set the associated_files attributes */
+    if (strcmp(cmor_tables[cmor_vars[var_id].ref_table_id].URL,"")==0) {
+      snprintf(msg,CMOR_MAX_STRING,"Your table does not contain a reference URL, please consider adding it");
+      cmor_handle_error(msg,CMOR_WARNING);
+      strncpy(ctmp,"",CMOR_MAX_STRING);
+    }
+    else {
+      strncpy(ctmp2,cmor_current_dataset.outpath,CMOR_MAX_STRING); /* remembers the path to stick it back later */
+/*       strncpy(cmor_current_dataset.outpath,cmor_tables[cmor_vars[var_id].ref_table_id].URL,CMOR_MAX_STRING); */
+/*       cmor_create_output_path(var_id,ctmp3); */
+/*       strncpy(cmor_current_dataset.outpath,ctmp2,CMOR_MAX_STRING); /\* puts back the right base path *\/ */
+      strncpy(ctmp3,cmor_tables[cmor_vars[var_id].ref_table_id].URL,CMOR_MAX_STRING);
+      strcpy(ctmp,"baseURL: ");
+      strncat(ctmp,ctmp3,CMOR_MAX_STRING-strlen(ctmp));
+      strncat(ctmp," ",CMOR_MAX_STRING-strlen(ctmp));
+
+    }
+
+/*     /\* prepares the common suffix for all fixed file *\/ */
+/*     strcpy(ctmp2,"../../../../fx/"); */
+/*     /\* realm *\/ */
+/*     /\* first check if the variable itslef has a realm *\/ */
+/*     if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[0]!='\0') { */
+/*       /\* we want to copy only the first realm here *\/ */
+/*       for (i=0;i<strlen(cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm);i++) { */
+/* 	if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[i]!=' ') { */
+/* 	  ctmp3[i]=cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[i]; */
+/* 	  ctmp3[i+1]='\0'; */
+/* 	} */
+/* 	else { */
+/* 	  break; */
+/* 	} */
+/*       } */
+/*       strncattrim(ctmp2,ctmp3,CMOR_MAX_STRING-strlen(ctmp2)); */
+/*     } */
+/*     else { /\*ok it didn't so we're using the value from the table *\/ */
+/*       strncattrim(ctmp2,cmor_tables[cmor_vars[var_id].ref_table_id].realm,CMOR_MAX_STRING-strlen(ctmp2)); */
+/*     } */
+/*     strncattrim(ctmp2,"/",CMOR_MAX_STRING-strlen(ctmp2)); */
+    
+    /* now appends the part to the gridspec file */
+    strncat(ctmp,"gridspecFile: ",CMOR_MAX_STRING-strlen(ctmp));
+    /* add the variable name */
+/*     strncat(ctmp3,"gridspec/r0/gridspec_",CMOR_MAX_STRING-strlen(ctmp3)); */
+    /* strncat(ctmp3,"gridspec",CMOR_MAX_STRING-strlen(ctmp3)); */
+    /* strncat(ctmp3,cmor_tables[cmor_vars[var_id].ref_table_id].table_id,CMOR_MAX_STRING-strlen(ctmp3)); */
+    /* Put here code for gridspec name */
+    strncpy(ctmp3,"gridspec_fx_",CMOR_MAX_STRING);
+    cmor_get_cur_dataset_attribute("model_id",msg);
+    for (i=0;i<strlen(msg);i++) {
+      if (cmor_convert_char_to_hyphen(msg[i])==1) {
+	msg[i]='-';
+      }
+    }
+    /* removes trailing "-" */
+    for (i=strlen(msg)-1;i>0;i--) {
+      if (msg[i]=='-') {
+	msg[i]='\0';
+      }
+      else {
+	break;
+      }
+    }
+    strncat(ctmp3,msg,CMOR_MAX_STRING-strlen(ctmp3));
+    if (strcmp(ctmp4,"")!=0) {
+      strncat(ctmp3,"_",CMOR_MAX_STRING-strlen(ctmp3));
+      strncat(ctmp3,ctmp4,CMOR_MAX_STRING-strlen(ctmp3));
+    }
+    strncat(ctmp3,"_r0i0p0.nc",CMOR_MAX_STRING-strlen(ctmp3));
+
+    strncat(ctmp,ctmp3,CMOR_MAX_STRING-strlen(ctmp));
+
+    if (cmor_has_variable_attribute(var_id,"cell_measures")==0) {
+      /*Ok does it contain "area" */
+      cmor_get_variable_attribute(var_id,"cell_measures",&ctmp5[0]);
+      k=-1;
+      for (i=0;i<strlen(ctmp5)-5;i++) {
+	if (strncmp(&ctmp5[i],"area:",5)==0) {
+	  k=i+6;
+	  break;
+	}
+      }
+      if (k!=-1) { /*ok we have this guy, let's figureout the name */
+	for(i=k;i<strlen(ctmp5);i++) {
+	  if ((ctmp5[i]==' ') || (ctmp5[i]=='\0')) break;
+	  ctmp6[i-k]=ctmp5[i];
+	}
+	ctmp6[i-k]='\0';
+	
+	/* now appends the part to the area file */
+	strncat(ctmp," cellAreaFile: ",CMOR_MAX_STRING-strlen(ctmp));
+	/* add the variable name */
+	/*     strncat(ctmp3,"cellArea/r0/cellArea_",CMOR_MAX_STRING-strlen(ctmp3)); */
+	strncpy(ctmp3,ctmp6,CMOR_MAX_STRING);
+	strncat(ctmp3,"_fx_",CMOR_MAX_STRING-strlen(ctmp3));
+	/* strncat(ctmp3,cmor_tables[cmor_vars[var_id].ref_table_id].table_id,CMOR_MAX_STRING-strlen(ctmp3)); */
+	/* strncat(ctmp3,"_",CMOR_MAX_STRING-strlen(ctmp3)); */
+	cmor_get_cur_dataset_attribute("model_id",msg);
+	for (i=0;i<strlen(msg);i++) {
+	  if (cmor_convert_char_to_hyphen(msg[i])==1) {
+	    msg[i]='-';
+	  }
+	}
+	/* removes trailing "-" */
+	for (i=strlen(msg)-1;i>0;i--) {
+	  if (msg[i]=='-') {
+	    msg[i]='\0';
+	  }
+	  else {
+	    break;
+	  }
+	}
+	strncat(ctmp3,msg,CMOR_MAX_STRING-strlen(ctmp3));
+	if (strcmp(ctmp4,"")!=0) {
+	  strncat(ctmp3,"_",CMOR_MAX_STRING-strlen(ctmp3));
+	  strncat(ctmp3,ctmp4,CMOR_MAX_STRING-strlen(ctmp3));
+	}
+	strncat(ctmp3,"_r0i0p0.nc",CMOR_MAX_STRING-strlen(ctmp3));
+	
+	strncat(ctmp,ctmp3,CMOR_MAX_STRING-strlen(ctmp));
+      }
+      k=-1;
+      for (i=0;i<strlen(ctmp5)-7;i++) {
+	if (strncmp(&ctmp5[i],"volume:",7)==0) {
+	  k=i+8;
+	  break;
+	}
+      }
+      if (k!=-1) { /*ok we have this guy, let's figureout the name */
+	for(i=k;i<strlen(ctmp5);i++) {
+	  if ((ctmp5[i]==' ') || (ctmp5[i]=='\0')) break;
+	  ctmp6[i-k]=ctmp5[i];
+	}
+	ctmp6[i-k]='\0';
+	/* now appends the part to the volume file */	
+	strncat(ctmp," cellVolumeFile: ",CMOR_MAX_STRING-strlen(ctmp));
+	/* add the variable name */
+	/*     strncat(ctmp3,"cellVolume/r0/cellVolume_",CMOR_MAX_STRING-strlen(ctmp3)); */
+	strncpy(ctmp3,ctmp6,CMOR_MAX_STRING);
+	strncat(ctmp3,"_fx_",CMOR_MAX_STRING-strlen(ctmp3));
+	/* strncat(ctmp3,cmor_tables[cmor_vars[var_id].ref_table_id].table_id,CMOR_MAX_STRING-strlen(ctmp3)); */
+	/* strncat(ctmp3,"_",CMOR_MAX_STRING-strlen(ctmp3)); */
+	cmor_get_cur_dataset_attribute("model_id",msg);
+	for (i=0;i<strlen(msg);i++) {
+	  if (cmor_convert_char_to_hyphen(msg[i])==1) {
+	    msg[i]='-';
+	  }
+	}
+	/* removes trailing "-" */
+	for (i=strlen(msg)-1;i>0;i--) {
+	  if (msg[i]=='-') {
+	    msg[i]='\0';
+	  }
+	  else {
+	    break;
+	  }
+	}
+	strncat(ctmp3,msg,CMOR_MAX_STRING-strlen(ctmp3));
+	if (strcmp(ctmp4,"")!=0) {
+	  strncat(ctmp3,"_",CMOR_MAX_STRING-strlen(ctmp3));
+	  strncat(ctmp3,ctmp4,CMOR_MAX_STRING-strlen(ctmp3));
+	}
+	strncat(ctmp3,"_r0i0p0.nc",CMOR_MAX_STRING-strlen(ctmp3));
+	
+	
+	strncat(ctmp,ctmp3,CMOR_MAX_STRING-strlen(ctmp));
+      }
+    }
+
+    cmor_set_variable_attribute(var_id,"associated_files",'c',ctmp);
+
+    /* make sure we are in def mode */
+    ierr = nc_redef(ncafid);
+    if (ierr != NC_NOERR && ierr != NC_EINDEFINE) {
+      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) putting metadata file (%s) in def mode, nc file id was: %i",ierr,cmor_current_dataset.associated_file_name,ncafid);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+
+    /* ok writes global attributes */
+    /* first figures out time */
+    lt = time(NULL);
+    ptr = gmtime(&lt);
+    snprintf(msg,CMOR_MAX_STRING,"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);
+    cmor_set_cur_dataset_attribute("creation_date",msg,0);
+    if (did_history==0) {
+      snprintf(ctmp,CMOR_MAX_STRING,"%s CMOR rewrote data to comply with CF standards and %s requirements.",msg,cmor_tables[cmor_vars[var_id].ref_table_id].project_id);
+      if (cmor_has_cur_dataset_attribute("history")==0) {
+	cmor_get_cur_dataset_attribute("history",msg);
+	snprintf(ctmp2,CMOR_MAX_STRING,"%s %s",msg,ctmp);
+	strncpy(ctmp,ctmp2,CMOR_MAX_STRING);
+      }
+      cmor_set_cur_dataset_attribute("history",ctmp,0);
+      did_history=1;
+    }
+    snprintf(msg,CMOR_MAX_STRING,"CF-%.1f",cmor_tables[cmor_vars[var_id].ref_table_id].cf_version);
+    cmor_set_cur_dataset_attribute("Conventions",msg,0);
+    cmor_set_cur_dataset_attribute("project_id",cmor_tables[cmor_vars[var_id].ref_table_id].project_id,0);
+    snprintf(msg,CMOR_MAX_STRING,"Table %s (%s) ",cmor_tables[cmor_vars[var_id].ref_table_id].table_id,cmor_tables[cmor_vars[var_id].ref_table_id].date);
+    for (i=0;i<16;i++) sprintf(&ctmp[2*i],"%02x",cmor_tables[cmor_vars[var_id].ref_table_id].md5[i]);
+    ctmp[32]='\0';
+    strcat(msg,ctmp);
+    cmor_set_cur_dataset_attribute("table_id",msg,0);
+    if ( cmor_has_cur_dataset_attribute("model_id")==0) {
+      cmor_get_cur_dataset_attribute("model_id",ctmp);
+    }
+    else {
+      ctmp[0]='\0';
+    }
+    cmor_get_cur_dataset_attribute("experiment",ctmp2);
+/*     /\* ok here we need to reset the expt id to the long name if necessary *\/ */
+/*     for (i=0;i<cmor_tables[cmor_vars[var_id].ref_table_id].nexps;i++) { */
+/*       if (strncmp(cmor_tables[cmor_vars[var_id].ref_table_id].sht_expt_ids[i],ctmp2,CMOR_MAX_STRING)==0) { */
+/* 	strncpy(ctmp2,cmor_tables[cmor_vars[var_id].ref_table_id].expt_ids[i],CMOR_MAX_STRING); /\* make sure it is the long id *\/ */
+/* 	break; */
+/*       } */
+/*     } */
+/*     cmor_set_cur_dataset_attribute("experiment_id",ctmp2,0); */
+
+
+    snprintf(msg,CMOR_MAX_STRING,"%s model output prepared for %s %s",ctmp,cmor_tables[cmor_vars[var_id].ref_table_id].project_id,ctmp2);
+    cmor_set_cur_dataset_attribute("title",msg,0);
+    /* check table cf version vs ours */
+    afloat = CMOR_CF_VERSION_MAJOR;
+    d = CMOR_CF_VERSION_MINOR;
+    while(d>1.) d/=10.;
+    afloat+=d;
+
+    if (cmor_tables[cmor_vars[var_id].ref_table_id].cf_version>afloat) {
+      snprintf(msg,CMOR_MAX_STRING,"Your table claims to enforce CF version %f but this version of the library is designed for CF up to: %i.%i",cmor_tables[cmor_vars[var_id].ref_table_id].cf_version,CMOR_CF_VERSION_MAJOR,CMOR_CF_VERSION_MINOR);
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+
+
+    /* Ok now we need to check the parent_experiment_id is valid */
+    if (cmor_has_cur_dataset_attribute("parent_experiment_id")==0) {
+      cmor_get_cur_dataset_attribute("parent_experiment_id",msg);
+      if (strcmp(msg,"N/A")!=0) { /* did the user pass an expt */
+	cmor_get_cur_dataset_attribute("experiment_id",ctmp);
+	if (strcmp(msg,ctmp)==0) {
+	  sprintf(ctmp,"Your parent_experiment id matches your current experiment_id, they are both set to: %s",msg);
+	  cmor_handle_error(ctmp,CMOR_NORMAL);
+	  cmor_pop_traceback();
+	  return 1;
+	} 
+	else {
+	  cmor_get_cur_dataset_attribute("experiment",ctmp);
+	  if (strcmp(msg,ctmp)==0) {
+	    sprintf(ctmp,"Your parent_experiment id matches your current experiment_id, they are both set to: %s",msg);
+	    cmor_handle_error(ctmp,CMOR_NORMAL);
+	    cmor_pop_traceback();
+	    return 1;
+	  }
+	  else { /*ok now we can check it is a valid "other" experiment */
+	    if (cmor_check_expt_id(msg,cmor_vars[var_id].ref_table_id,"parent_experiment","parent_experiment_id")!=0) {
+	      snprintf(ctmp,CMOR_MAX_STRING,"Invalid dataset parent experiment id: %s, check against table: %s",msg,cmor_tables[cmor_vars[var_id].ref_table_id].table_id);
+	      cmor_handle_error(ctmp,CMOR_NORMAL);
+	      cmor_pop_traceback();
+	      return 1;
+	    }
+	  }
+	}
+      }
+      else {
+	if ( cmor_has_cur_dataset_attribute("branch_time")==0) {
+	  cmor_get_cur_dataset_attribute("branch_time",msg);
+	  sscanf(msg,"%lf",&tmps[0]);
+	  if (tmps[0]!=0.) {
+	    sprintf(msg,"when dataset attribute parent_experiment_id is set to N/A branch_time must be 0. you passed: %lf, we are resetting to 0.",tmps[0]);
+	    cmor_handle_error(msg,CMOR_WARNING);
+	    cmor_set_cur_dataset_attribute("branch_time","0.",1);
+	  }
+	}
+	cmor_set_cur_dataset_attribute("parent_experiment","N/A",1);
+      }
+    }
+    
+    cmor_has_required_global_attributes(cmor_vars[var_id].ref_table_id);
+    
+    /* ok at this point if we are CMIP5 needs to check source and model_id are identical */
+    if (strcmp(cmor_tables[cmor_vars[var_id].ref_table_id].project_id,"CMIP5")==0) {
+      cmor_get_cur_dataset_attribute("model_id",ctmp5);
+      cmor_get_cur_dataset_attribute("source",ctmp6);
+      if (strncmp(ctmp5,ctmp6,strlen(ctmp5))!=0) {
+	snprintf(msg,CMOR_MAX_STRING,"source attribute does not start with 'model_id', it should start with: %s",ctmp5);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+    }
+    
+    /* first check if the variable itself has a realm */
+    if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[0]!='\0') {
+      cmor_set_cur_dataset_attribute("modeling_realm",cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm,0);
+    }
+    else { /*ok it didn't so we're using the value from the table */
+      cmor_set_cur_dataset_attribute("modeling_realm",cmor_tables[cmor_vars[var_id].ref_table_id].realm,0);
+    }
+    
+
+    /* generates a new unique id */
+    uuid_create(&myuuid);
+    uuid_make(myuuid,4);
+    myuuid_str = NULL;
+    fmt = UUID_FMT_STR;
+    uuid_export(myuuid,fmt,&myuuid_str,&uuidlen);
+    strncpy(cmor_current_dataset.tracking_id,(char *)myuuid_str,CMOR_MAX_STRING);
+    cmor_set_cur_dataset_attribute("tracking_id",cmor_current_dataset.tracking_id,0);
+    free(myuuid_str);
+    uuid_destroy(myuuid);
+
+
+    for (i=0;i<cmor_current_dataset.nattributes;i++) {
+      if (strcmp(cmor_current_dataset.attributes_names[i],"calendar")!=0) {
+	if ((strcmp(cmor_current_dataset.attributes_names[i],"initialization_method")==0) || (strcmp(cmor_current_dataset.attributes_names[i],"physics_version")==0) ) { /* these two are actually int not char */
+	  sscanf(cmor_current_dataset.attributes_values[i],"%i",&itmp2);
+	  ierr = nc_put_att_int(ncid, NC_GLOBAL, cmor_current_dataset.attributes_names[i],NC_INT,1,&itmp2);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  if (ncid!=ncafid) {
+	    ierr = nc_put_att_int(ncafid, NC_GLOBAL, cmor_current_dataset.attributes_names[i],NC_INT,1,&itmp2);
+	    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att to metafile: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  }
+	}
+	else if (strcmp(cmor_current_dataset.attributes_names[i],"branch_time")==0) {
+	  /* double attribute */
+	  sscanf(cmor_current_dataset.attributes_values[i],"%lf",&tmps[0]);
+	  ierr = nc_put_att_double(ncid, NC_GLOBAL, cmor_current_dataset.attributes_names[i],NC_DOUBLE,1,&tmps[0]);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  if (ncid!=ncafid) {
+	    ierr = nc_put_att_double(ncafid, NC_GLOBAL, cmor_current_dataset.attributes_names[i],NC_DOUBLE,1,&tmps[0]);
+	    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att to metafile: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  }
+	}
+	else {
+	  itmp2 = strlen(cmor_current_dataset.attributes_values[i]);
+	  if (itmp2<CMOR_DEF_ATT_STR_LEN) {
+	    for (itmp2=strlen(cmor_current_dataset.attributes_values[i]);itmp2<CMOR_DEF_ATT_STR_LEN;itmp2++) {
+	      cmor_current_dataset.attributes_values[i][itmp2]='\0';
+	    }
+	    itmp2=CMOR_DEF_ATT_STR_LEN;
+	  }
+	  ierr = nc_put_att_text(ncid, NC_GLOBAL,cmor_current_dataset.attributes_names[i],itmp2,cmor_current_dataset.attributes_values[i]);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  if (ncid!=ncafid) {
+	    ierr = nc_put_att_text(ncafid, NC_GLOBAL,cmor_current_dataset.attributes_names[i],itmp2,cmor_current_dataset.attributes_values[i]);
+	    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att to metafile: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  }
+	}
+      }
+    }
+    /* realization */
+    ierr = nc_put_att_int(ncid, NC_GLOBAL,"realization",NC_INT,1,&cmor_current_dataset.realization);
+    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing global att realization (%i)",ierr,cmor_current_dataset.realization); cmor_handle_error(msg,CMOR_CRITICAL);}
+
+    /* cmor_ver */
+    snprintf(msg,CMOR_MAX_STRING,"%i.%i.%i",CMOR_VERSION_MAJOR,CMOR_VERSION_MINOR,CMOR_VERSION_PATCH);
+    ierr = nc_put_att_text(ncid, NC_GLOBAL,"cmor_version",strlen(msg)+1,msg);
+    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing global att cmor_version (%f)",ierr,afloat); cmor_handle_error(msg,CMOR_CRITICAL);}
+
+    if (ncid!=ncafid) {
+      ierr = nc_put_att_int(ncafid, NC_GLOBAL,"realization",NC_INT,1,&cmor_current_dataset.realization);
+      if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing global att realization (%i) to metafile",ierr,cmor_current_dataset.realization); cmor_handle_error(msg,CMOR_CRITICAL);}
+      /* cmor_ver */
+      ierr = nc_put_att_text(ncid, NC_GLOBAL,"cmor_version",strlen(msg)+1,msg);
+      if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing global att cmor_version (%f)",ierr,afloat); cmor_handle_error(msg,CMOR_CRITICAL);}
+    }
+    if (isfixed==1) cmor_current_dataset.realization = origRealization;
+    
+    /* store netcdf file id associated with this variable */
+    cmor_vars[var_id].initialized=ncid;
+
+
+    /* define dimensions in NetCDF file */
+    for (i=0;i<cmor_vars[var_id].ndims;i++) {
+      /* did we flip that guy? */
+      if (cmor_axes[cmor_vars[var_id].axes_ids[i]].revert==-1) {
+	sprintf(msg,"Inverted axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	cmor_update_history(var_id,msg);
+      }
+      /* Axis length */
+      j=cmor_axes[cmor_vars[var_id].axes_ids[i]].length;
+      if ((i==0)&&(cmor_axes[cmor_vars[var_id].axes_ids[i]].axis=='T')) j=NC_UNLIMITED;
+      if ((cmor_axes[cmor_vars[var_id].axes_ids[i]].axis=='X') || (cmor_axes[cmor_vars[var_id].axes_ids[i]].axis=='Y')) {
+	nc_dim_chunking[i]=j;
+      }
+      else if (cmor_axes[cmor_vars[var_id].axes_ids[i]].isgridaxis==1) {
+	nc_dim_chunking[i]=j;
+      }
+      else {
+	nc_dim_chunking[i]=1;
+      }
+      ierr = nc_def_dim(ncid,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,j,&nc_dim[i]);
+      if (ierr != NC_NOERR) {
+	snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for dimension definition of axis: %s (%i), for variable %i (%s)",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,i,var_id,cmor_vars[var_id].id);
+	ierr = nc_enddef(ncid);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      nc_dim_af[i]=nc_dim[i];
+      if (ncid!=ncafid) {
+	ierr = nc_def_dim(ncafid,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,j,&nc_dim_af[i]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for dimension definition of axis: %s (%i) in metafile",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,i); cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+    }
+
+    /* creates the bounds dim (only in metafile?)*/
+    ierr = nc_def_dim(ncafid,"bnds",2,&dim_bnds);
+    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NC error (%i), %s error creating bnds dimension to metafile",ierr,cmor_vars[var_id].id); cmor_handle_error(msg,CMOR_CRITICAL);}
+
+    /* Now define the variable corresponding to store the dimensions values */
+    for (i=0;i<cmor_vars[var_id].ndims;i++) {
+      if (cmor_axes[cmor_vars[var_id].axes_ids[i]].store_in_netcdf == 0) continue;
+      if (cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues == NULL) {
+	ierr = nc_def_var(ncid,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,NC_DOUBLE,1,&nc_dim[i],&nc_vars[i]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NetCDF Error (%i) for variable %s error defining dim var: %i (%s)",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+
+	/* /\* table are different ? *\/ */
+	/* if (cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id!=cmor_vars[var_id].ref_table_id) { */
+	/*   snprintf(msg,CMOR_MAX_STRING,"Table %s (%s) ",cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].table_id,cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].date); */
+	/*   for (i=0;i<16;i++) sprintf(&ctmp[2*i],"%02x",cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].md5[i]); */
+	/*   ctmp[32]='\0'; */
+	/*   strcat(msg,ctmp); */
+	/*   ierr = nc_put_att_text(ncid, nc_vars[i],"table_id",strlen(msg)+1,msg); */
+	/*   if (ierr != NC_NOERR) { */
+	/*     snprintf(ctmp2,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s axis %s writing table_id att (%s)",ierr,cmor_vars[var_id].id,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,msg); */
+	/*     cmor_handle_error(ctmp2,CMOR_CRITICAL); */
+	/*   } */
+	/* } */
+	/* Compression stuff */
+	if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+	  ics = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].shuffle;
+	  icd = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate;
+	  icdl = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate_level;
+	  ierr = nc_def_var_deflate(ncid,nc_vars[i],ics,icd,icdl);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for dimension %s for variable '%s'",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,cmor_vars[var_id].id);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+
+	nc_vars_af[i]=nc_vars[i];
+	if (ncid!=ncafid) {
+	  ierr = nc_def_var(ncafid,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,NC_DOUBLE,1,&nc_dim_af[i],&nc_vars_af[i]);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NetCDF Error (%i) for variable %s error defining dim var: %i (%s) in metafile",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+
+	  /* Compression stuff */
+	  if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+	    ics = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].shuffle;
+	    icd = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate;
+	    icdl = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate_level;
+	    ierr = nc_def_var_deflate(ncafid,nc_vars_af[i],ics,icd,icdl);
+	    if (ierr != NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for dimension %s for variable '%s'",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,cmor_vars[var_id].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	  }
+	}
+
+      }
+      else {
+	/* ok at this point i'm assuming only 1 string dimension! might need to be revised */
+	/* so i only create 1 strlen dim */
+	/* first need to figure out if the "region name is defined */
+	strcpy(ctmp,cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_axis_id].cname);
+	if (ctmp[0]=='\0') {
+	  strcpy(ctmp,"geo_region");
+	}
+	if (cmor_has_variable_attribute(var_id,"coordinates")==0) {
+	  cmor_get_variable_attribute(var_id,"coordinates",msg);
+	  strncat(msg," ",CMOR_MAX_STRING-strlen(msg));
+	  strncat(msg,ctmp,CMOR_MAX_STRING-strlen(msg));
+	}
+	else {
+	  strncpy(msg,ctmp,CMOR_MAX_STRING);
+	}
+	cmor_set_variable_attribute(var_id,"coordinates",'c',msg);
+	l=0;
+	for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) {
+/* 	  printf("ok reading value: %i\n",j); */
+/* 	  printf("we think it is: %s\n",cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues[j]); */
+	  strncpy(msg,cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues[j],CMOR_MAX_STRING);
+	  k = strlen(msg);
+	  if (k>l) l=k;
+	}
+	/* ok so now i can create the dummy dim strlen */
+	ierr = nc_def_dim(ncid,"strlen",l,&tmp_dims[1]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for dummy 'strlen' dimension definition of axis: %s (%i) in metafile",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,i); cmor_handle_error(msg,CMOR_CRITICAL);}
+	tmp_dims[0]=nc_dim[i];
+	ierr = nc_def_var(ncid,ctmp,NC_CHAR,2,&tmp_dims[0],&nc_vars[i]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NetCDF Error (%i) for variable %s error defining dim var: %i (%s)",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+	nc_vars_af[i]=nc_vars[i];
+	if (ncid!=ncafid) {
+	  ierr = nc_def_dim(ncafid,"strlen",l,&tmp_dims[1]);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for dummy 'strlen' dimension definition of axis: %s (%i) in metafile",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,i); cmor_handle_error(msg,CMOR_CRITICAL);}
+	  tmp_dims[0]=nc_dim_af[i];
+	  ierr = nc_def_var(ncafid,ctmp,NC_CHAR,1,&tmp_dims[0],&nc_vars_af[i]);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NetCDF Error (%i) for variable %s error defining dim var: %i (%s) in metafile",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+	}
+      }
+      /* ok do we have bounds on this axis? */
+      if ((cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds!=NULL)||((i==0) && (time_bounds!=NULL))) {
+	strncpy(ctmp,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,CMOR_MAX_STRING);
+	strncat(ctmp,"_bnds",CMOR_MAX_STRING-strlen(ctmp));
+	snprintf(msg,CMOR_MAX_STRING,"bounds");
+	if (i==0) {
+	  /* Ok here we need to see if it is a climatological variable in order to change */
+	  /* the "bounds" attribute into "climatology" */
+	  if (cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_axis_id].climatology==1) {
+	    snprintf(msg,CMOR_MAX_STRING,"climatology");
+	    strncpy(ctmp,"climatology_bnds",CMOR_MAX_STRING);
+	  }
+	}
+	dims_bnds_ids[0]=nc_dim[i];
+	dims_bnds_ids[1]=dim_bnds;
+	ierr = nc_def_var(ncafid,ctmp,NC_DOUBLE,2,&dims_bnds_ids[0],&nc_bnds_vars[i]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NetCDF Error (%i) for variable %s error defining bounds dim var: %i (%s)",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+
+	/* Compression stuff */
+	if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+	  ics = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].shuffle;
+	  icd = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate;
+	  icdl = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate_level;
+	  ierr = nc_def_var_deflate(ncafid,nc_bnds_vars[i],ics,icd,icdl);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for bounds variable %s for variable '%s'",ierr,ctmp,cmor_vars[var_id].id);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+	  /* sets the bounds attribute of parent var */
+	if (i==0) cmor_vars[var_id].time_bnds_nc_id = nc_bnds_vars[i];
+	ierr = nc_put_att_text(ncafid,nc_vars[i],msg,strlen(ctmp)+1,ctmp);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING, "NetCDF Error (%i) for variable %s error defining bounds attribute var: %i (%s)",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+      /* Creates attribute related to that axis */
+      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].nattributes;j++){
+	if (strcmp(cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j],"z_factors")==0) {
+	  /* ok this part checks for z_factor things */
+	  /* creates the formula terms attriubte */
+	  strncpy(msg,cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_values_char[j],CMOR_MAX_STRING);
+	  n=strlen(msg)+1;
+	  ierr = nc_put_att_text(ncid,nc_vars[i],"formula_terms",n,msg);
+	  if (ierr != NC_NOERR) {snprintf(ctmp,CMOR_MAX_STRING,"NetCDF error (%i) writing formula term att (%s) for axis %i (%s)",ierr,msg,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+/* 	  printf("doing formula for: %s\n",msg); */
+	  if (ncid!=ncafid) {
+	  ierr = nc_put_att_text(ncafid,nc_vars_af[i],"formula_terms",n,msg);
+	  if (ierr != NC_NOERR) {snprintf(ctmp,CMOR_MAX_STRING,"NetCDF error (%i) writing formula term att (%s) for axis %i (%s)",ierr,msg,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);cmor_handle_error(ctmp,CMOR_CRITICAL);}
+	  }
+	  ierr =  cmor_define_zfactors_vars(var_id,ncafid, &nc_dim_af[0],msg,&nzfactors, &zfactors[0],&nc_zfactors[0],i,-1);
+	}
+	else if (strcmp(cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j],"z_bounds_factors")==0) {
+	  cmor_get_axis_attribute(cmor_vars[var_id].axes_ids[i],"formula",'c',&msg);
+	  n=strlen(msg)+1;
+	  ierr = nc_put_att_text(ncafid,nc_bnds_vars[i],"formula",n,msg);
+	  cmor_get_axis_attribute(cmor_vars[var_id].axes_ids[i],"standard_name",'c',&msg);
+	  n=strlen(msg);
+	  ierr = nc_put_att_text(ncafid,nc_bnds_vars[i],"standard_name",n,msg);
+	  cmor_get_axis_attribute(cmor_vars[var_id].axes_ids[i],"units",'c',&msg);
+	  n=strlen(msg)+1;
+	  ierr = nc_put_att_text(ncafid,nc_bnds_vars[i],"units",n,msg);
+	  /*formula terms*/
+	  strncpy(msg,cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_values_char[j],CMOR_MAX_STRING);
+	  n=strlen(msg)+1;
+	  ierr = nc_put_att_text(ncafid,nc_bnds_vars[i],"formula_terms",n,msg);
+	  ierr =  cmor_define_zfactors_vars(var_id,ncafid, nc_dim,msg,&nzfactors, &zfactors[0],&nc_zfactors[0],i,dim_bnds);
+	}
+	else if (strcmp(cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j],"interval")==0) {
+	  if (cmor_has_variable_attribute(var_id,"cell_methods")==0) {
+	    cmor_get_variable_attribute(var_id,"cell_methods",msg);
+	  }
+	  else {
+	    strcpy(msg,"");
+	  }
+	  strncpy(ctmp,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,CMOR_MAX_STRING);
+	  strncat(ctmp,":",CMOR_MAX_STRING-strlen(ctmp));
+	  icd = strlen(ctmp);
+	  itmpmsg = strlen(msg);
+	  for(ics=0;ics<(itmpmsg-icd);ics++) {
+	    for(icdl=0;icdl<icd;icdl++) {
+	      ctmp2[icdl]=msg[ics+icdl];
+	      ctmp2[icdl+1]='\0';
+	    }
+	    if (strcmp(ctmp2,ctmp)==0) {
+	      itmp2 = strlen(ctmp);
+	      for(icdl=0;icdl<(ics+itmp2+1);icdl++) {
+		ctmp2[icdl]=msg[icdl];
+	      }
+	      while((msg[icdl]!=' ')&&(msg[icdl]!='\0')) {
+		ctmp2[icdl]=msg[icdl];
+		icdl++;
+	      }
+	      ctmp2[icdl]='\0';
+	      icd = strlen(ctmp2);
+	      /* ok now we need to know if the user passed an interval or not in order to add it */
+	      cmor_get_axis_attribute(cmor_vars[var_id].axes_ids[i],"interval",'c',ctmp);
+	      cmor_trim_string(ctmp,ctmp3);
+	      if (strcmp(ctmp3,"")!=0) {
+		strncat(ctmp2," (interval: ",CMOR_MAX_STRING-strlen(ctmp2));
+		strncat(ctmp2,ctmp,CMOR_MAX_STRING-strlen(ctmp2));
+		strncat(ctmp2,")",CMOR_MAX_STRING-strlen(ctmp2));
+	      }
+	      ierr = strlen(ctmp2)-icd;
+	      itmp3 = strlen(msg);
+	      for(icdl=icd;icdl<itmp3;icdl++) {
+		ctmp2[icdl+ierr]=msg[icdl];
+		ctmp2[icdl+1+ierr]='\0';
+	      }
+	      cmor_set_variable_attribute(var_id,"cell_methods",'c',ctmp2);
+	      break;
+	    }
+	  }
+	}
+	else {
+/* 	  printf("ok in the else thingy: %s\n",cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j]); */
+	  if (cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_type[j]=='c') {
+	    ierr = cmor_put_nc_char_attribute(ncid,nc_vars[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j],cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_values_char[j],cmor_vars[var_id].id);
+	    if (ncid!=ncafid) {
+	      ierr = cmor_put_nc_char_attribute(ncafid,nc_vars_af[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j],cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_values_char[j],cmor_vars[var_id].id);
+	    }
+	  }
+	  else {
+	    ierr = cmor_put_nc_num_attribute(ncid,nc_vars[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j], cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_type[j], cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_values_num[j],cmor_vars[var_id].id);
+	    if (ncid!=ncafid) {
+	      ierr = cmor_put_nc_num_attribute(ncafid,nc_vars_af[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes[j], cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_type[j], cmor_axes[cmor_vars[var_id].axes_ids[i]].attributes_values_num[j],cmor_vars[var_id].id);
+	    }
+	  }
+	}
+      }
+    }
+    /* Store the dimension id for reuse when writting over multiple call to cmor_write */
+    cmor_vars[var_id].time_nc_id = nc_vars[0];
+
+    /* check if it is a grid thing */
+    if (cmor_vars[var_id].grid_id>-1) {
+      /* first of all checks for grid_mapping */
+      if (strcmp(cmor_grids[cmor_vars[var_id].grid_id].mapping,"")!=0) {
+	/* ok we need to create this dummy variable that contains all the info */
+	cmor_set_variable_attribute(var_id,"grid_mapping",'c',cmor_grids[cmor_vars[var_id].grid_id].mapping);
+	ierr = nc_def_var(ncafid,cmor_grids[cmor_vars[var_id].grid_id].mapping,NC_INT,0,&nc_dims_associated[0],&m);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NetCDF error %i while defining associated grid mapping variable %s",ierr,cmor_grids[cmor_vars[var_id].grid_id].mapping);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	/* Creates attributes related to that variable */
+	ierr = cmor_put_nc_char_attribute(ncafid,m,"grid_mapping_name",cmor_grids[cmor_vars[var_id].grid_id].mapping,cmor_vars[var_id].id);
+	for (k=0;k<cmor_grids[cmor_vars[var_id].grid_id].nattributes;k++){
+	  if (strcmp(cmor_grids[cmor_vars[var_id].grid_id].attributes_names[k],"standard_parallel1")==0 ||strcmp(cmor_grids[cmor_vars[var_id].grid_id].attributes_names[k],"standard_parallel2")==0 ){
+	    i = -cmor_vars[var_id].grid_id-10;
+	    if ((cmor_has_grid_attribute(i,"standard_parallel1")==0) && (cmor_has_grid_attribute(i,"standard_parallel2")==0)) {
+	      cmor_get_grid_attribute(i,"standard_parallel1",&tmps[0]);
+	      cmor_get_grid_attribute(i,"standard_parallel2",&tmps[1]);
+	      ierr = nc_put_att_double(ncafid,m,"standard_parallel",NC_DOUBLE,2,&tmps[0]);
+	    }
+	    else if (cmor_has_grid_attribute(i,"standard_parallel1")==0) {
+	      cmor_get_grid_attribute(i,"standard_parallel1",&tmps[0]);
+	      ierr = nc_put_att_double(ncafid,m,"standard_parallel",NC_DOUBLE,1,&tmps[0]);
+	    }
+	    else {
+	      cmor_get_grid_attribute(i,"standard_parallel2",&tmps[0]);
+	      ierr = nc_put_att_double(ncafid,m,"standard_parallel",NC_DOUBLE,1,&tmps[0]);
+	    }
+	    if (ierr!=NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) writing standard_parallel to file",ierr);
+	      cmor_handle_error(msg,CMOR_NORMAL);
+	      cmor_pop_traceback();
+	      return 1;
+	    }
+	  }
+	  else {
+	    ierr = cmor_put_nc_num_attribute(ncafid,m,cmor_grids[cmor_vars[var_id].grid_id].attributes_names[k],'d',cmor_grids[cmor_vars[var_id].grid_id].attributes_values[k],cmor_grids[cmor_vars[var_id].grid_id].mapping);
+	  }
+	}
+      }
+      /* preps the marker for vertices diemnsions */
+      m=0;
+      /* At this point creates the associated variables */
+      /* all is done is associated file */
+      for (i=0;i<5;i++) {
+	m2[i]=0;
+	j = cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i];
+/* 	printf("i: %i, associated is: %i\n",i,j); */
+	if (j!=-1) {
+	  /* ok we need to define this variable */
+	  l=0;
+	  /* first we need to figure out the actual grid dimensions and their netcdf eq */
+	  for(k=0;k<cmor_vars[var_id].ndims;k++) {
+/* 	    printf("axis: %s\n",cmor_axes[cmor_vars[var_id].axes_ids[k]].id); */
+	    if (cmor_axes[cmor_vars[var_id].axes_ids[k]].isgridaxis==1) {
+	      nc_dims_associated[l]=nc_dim_af[k];
+/* 	      printf("ok we have a grid axis %s associated with dim %i (k is: %i)\n",cmor_axes[cmor_vars[var_id].axes_ids[k]].id,l,k); */
+	      if (m2[i]==0 && (i==0 || i==1)) {
+		if (cmor_has_variable_attribute(var_id,"coordinates")==0) {
+		  cmor_get_variable_attribute(var_id,"coordinates",&msg);
+		  strncat(msg," ",CMOR_MAX_STRING-strlen(msg));
+		  strncat(msg,cmor_vars[cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i]].id,CMOR_MAX_STRING-strlen(msg));
+		}
+		else {
+		  strncpy(msg,cmor_vars[cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i]].id,CMOR_MAX_STRING-strlen(msg));
+		}
+		cmor_set_variable_attribute(var_id,"coordinates",'c',msg);
+		m2[i]=1;
+	      }
+	      l++;
+	    }
+	  }
+	  if (((i==2) || (i==3)) && (m==0)) { /*vertices need to be added */
+	    m=1; /* ok now it has been defined */
+	    ierr = nc_def_dim(ncafid,"vertices",cmor_axes[cmor_vars[j].axes_ids[cmor_vars[j].ndims-1]].length,&nc_dims_associated[l]);
+	    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error %i while defining vertices dimension",ierr);cmor_handle_error(msg,CMOR_CRITICAL);}
+	  }
+	  mtype = cmor_vars[j].type;
+/* 	  printf("type, ndims: %c, %i\n",mtype,cmor_vars[j].ndims); */
+/* 	  for(k=0;k<cmor_vars[var_id].ndims;k++) { */
+/* 	    printf("nc dim for dim %i is: %i\n",k,nc_dims_associated[k]); */
+/* 	  } */
+	  if (mtype=='d' ) ierr = nc_def_var(ncafid,cmor_vars[j].id,NC_DOUBLE,cmor_vars[j].ndims,&nc_dims_associated[0],&nc_associated_vars[i]);
+	  else if (mtype=='f' ) ierr = nc_def_var(ncafid,cmor_vars[j].id,NC_FLOAT,cmor_vars[j].ndims,&nc_dims_associated[0],&nc_associated_vars[i]);
+	  else if (mtype=='l' ) ierr = nc_def_var(ncafid,cmor_vars[j].id,NC_INT,cmor_vars[j].ndims,&nc_dims_associated[0],&nc_associated_vars[i]);
+	  else if (mtype=='i' ) ierr = nc_def_var(ncafid,cmor_vars[j].id,NC_INT,cmor_vars[j].ndims,&nc_dims_associated[0],&nc_associated_vars[i]);
+	  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error %i while defining associated variable %s",ierr,cmor_vars[j].id);cmor_handle_error(msg,CMOR_CRITICAL);}
+	  /* /\* at this point we check if tables match *\/ */
+	  /* if (cmor_vars[j].ref_table_id!=cmor_vars[var_id].ref_table_id) { */
+	  /*   snprintf(msg,CMOR_MAX_STRING,"Table %s (%s) ",cmor_tables[cmor_vars[j].ref_table_id].table_id,cmor_tables[cmor_vars[j].ref_table_id].date); */
+	  /*   for (i=0;i<16;i++) sprintf(&ctmp[2*i],"%02x",cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].md5[i]); */
+	  /*   ctmp[32]='\0'; */
+	  /*   strcat(msg,ctmp); */
+	  /*   ierr = nc_put_att_text(ncid, nc_associated_vars[i],"table_id",strlen(msg)+1,msg); */
+	  /*   if (ierr != NC_NOERR) { */
+	  /*     snprintf(ctmp2,CMOR_MAX_STRING,"NetCDF error (%i) for associated variable %s writing table_id att (%s) onto associated var: %s",ierr,cmor_vars[var_id].id,msg,cmor_vars[j].id); */
+	  /*     cmor_handle_error(ctmp2,CMOR_CRITICAL); */
+	  /*   } */
+	  /* } */
+	  /* Creates attributes related to that variable */
+	  for (k=0;k<cmor_vars[j].nattributes;k++){
+	    if (strcmp(cmor_vars[j].attributes[k],"flag_values")==0) {
+	      /* ok we need to convert the string to a list of int */
+	      ierr = cmor_convert_string_to_list(cmor_vars[j].attributes_values_char[k],'i',(void *)&int_list,&nelts);
+	      ierr = nc_put_att_int(ncafid, nc_associated_vars[i],"flag_values",NC_INT,nelts,int_list);
+	      if (ierr != NC_NOERR) {
+		snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) setting flags numerical attribute on variable",ierr);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	      free(int_list);
+	    }
+	    else if (cmor_vars[j].attributes_type[k] == 'c') {
+	      ierr = cmor_put_nc_char_attribute(ncafid,nc_associated_vars[i],cmor_vars[j].attributes[k],cmor_vars[j].attributes_values_char[k],cmor_vars[j].id) ;
+	    }
+	    else {
+	      ierr = cmor_put_nc_num_attribute(ncafid,nc_associated_vars[i],cmor_vars[j].attributes[k],cmor_vars[j].attributes_type[k],cmor_vars[j].attributes_values_num[k],cmor_vars[j].id);
+	    }
+	  }
+	  /* Compression stuff */
+	  if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+	    if (cmor_vars[j].ndims>0) {
+	      ics = cmor_tables[cmor_vars[j].ref_table_id].vars[cmor_vars[j].ref_var_id].shuffle;
+	      icd = cmor_tables[cmor_vars[j].ref_table_id].vars[cmor_vars[j].ref_var_id].deflate;
+	      icdl = cmor_tables[cmor_vars[j].ref_table_id].vars[cmor_vars[j].ref_var_id].deflate_level;
+	      ierr = nc_def_var_deflate(ncafid,nc_associated_vars[i],ics,icd,icdl);
+	      if (ierr != NC_NOERR) {
+		snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for variable '%s'",ierr,cmor_vars[j].id);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	    }
+	  }
+	}
+      }
+    }
+
+
+
+    /* Creates singleton dimension variables */
+    for(i=0;i<CMOR_MAX_DIMENSIONS;i++) {
+      j = cmor_vars[var_id].singleton_ids[i];
+      if (j!=-1) {
+	ierr = nc_def_var(ncid,cmor_axes[j].id,NC_DOUBLE,0,&nc_singletons[i],&nc_singletons[i]);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining scalar variable %s for variable %s",ierr,cmor_axes[j].id,cmor_vars[var_id].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	/* now  puts on its attributes */
+	for (k=0;k<cmor_axes[j].nattributes;k++){
+	  if (cmor_axes[j].attributes_type[k] == 'c') {
+	    ierr = cmor_put_nc_char_attribute(ncid,nc_singletons[i],cmor_axes[j].attributes[k],cmor_axes[j].attributes_values_char[k],cmor_vars[var_id].id) ;
+	  }
+	  else {
+	    ierr = cmor_put_nc_num_attribute(ncid,nc_singletons[i],cmor_axes[j].attributes[k],cmor_axes[j].attributes_type[k],cmor_axes[j].attributes_values_num[k],cmor_vars[var_id].id);
+	  }
+	}
+	/* ok we need to see if there's bounds as well... */
+	if (cmor_axes[j].bounds!=NULL) { /*yep */
+	  snprintf(msg,CMOR_MAX_STRING,"%s_bnds",cmor_axes[j].id);
+	  ierr = cmor_put_nc_char_attribute(ncid,nc_singletons[i],"bounds",msg,cmor_vars[var_id].id) ;
+	  ierr = nc_def_var(ncid,msg,NC_DOUBLE,1,&dim_bnds,&nc_singletons_bnds[i]);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining scalar bounds variable %s for variable %s",ierr,cmor_axes[j].id,cmor_vars[var_id].id);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+      }
+    }
+
+
+
+    /* Creating variable to write */
+    mtype=cmor_vars[var_id].type;
+    if (mtype=='d' ) ierr = nc_def_var(ncid,cmor_vars[var_id].id,NC_DOUBLE,cmor_vars[var_id].ndims,&nc_dim[0],&nc_vars[cmor_vars[var_id].ndims]);
+    else if (mtype=='f' ) ierr = nc_def_var(ncid,cmor_vars[var_id].id,NC_FLOAT,cmor_vars[var_id].ndims,&nc_dim[0],&nc_vars[cmor_vars[var_id].ndims]);
+    else if (mtype=='l' ) ierr = nc_def_var(ncid,cmor_vars[var_id].id,NC_INT,cmor_vars[var_id].ndims,&nc_dim[0],&nc_vars[cmor_vars[var_id].ndims]);
+    else if (mtype=='i' ) ierr = nc_def_var(ncid,cmor_vars[var_id].id,NC_INT,cmor_vars[var_id].ndims,&nc_dim[0],&nc_vars[cmor_vars[var_id].ndims]);
+    if (ierr != NC_NOERR) {
+      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) writing variable: %s",ierr,cmor_vars[var_id].id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+
+    /* Store the var id for reuse when writting over multiple call to cmor_write and for cmor_close */
+    cmor_vars[var_id].nc_var_id=nc_vars[cmor_vars[var_id].ndims];
+
+    /* Creates attributes related to that variable */
+    for (j=0;j<cmor_vars[var_id].nattributes;j++){
+      if (strcmp(cmor_vars[var_id].attributes[j],"flag_values")==0) {
+	/* ok we need to convert the string to a list of int */
+	ierr = cmor_convert_string_to_list(cmor_vars[var_id].attributes_values_char[j],'i',(void *)&int_list,&nelts);
+	ierr = nc_put_att_int(ncid,cmor_vars[var_id].nc_var_id ,"flag_values",NC_INT,nelts,int_list);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) setting flags numerical attribute on variable",ierr);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	free(int_list);
+      }
+      else if (cmor_vars[var_id].attributes_type[j] == 'c') {
+	ierr = cmor_put_nc_char_attribute(ncid,cmor_vars[var_id].nc_var_id,cmor_vars[var_id].attributes[j],cmor_vars[var_id].attributes_values_char[j],cmor_vars[var_id].id) ;
+      }
+      else {
+	ierr = cmor_put_nc_num_attribute(ncid,cmor_vars[var_id].nc_var_id,cmor_vars[var_id].attributes[j],cmor_vars[var_id].attributes_type[j],cmor_vars[var_id].attributes_values_num[j],cmor_vars[var_id].id);
+      }
+    }
+
+    if ((CMOR_NETCDF_MODE != CMOR_REPLACE_3) && (CMOR_NETCDF_MODE != CMOR_PRESERVE_3) && (CMOR_NETCDF_MODE != CMOR_APPEND_3)) {
+      /* Compression stuff */
+      ics = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].shuffle;
+      icd = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate;
+      icdl = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].deflate_level;
+      ierr = nc_def_var_deflate(ncid,cmor_vars[var_id].nc_var_id,ics,icd,icdl);
+      if (ierr != NC_NOERR) {
+	snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining compression parameters for variable '%s'",ierr,cmor_vars[var_id].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      /* Chunking stuff */
+#ifndef NC_CHUNKED
+#define NC_CHUNKED 0
+#endif
+      if (!((cmor_vars[var_id].grid_id>-1) && (cmor_grids[cmor_vars[var_id].grid_id].istimevarying==1))) {
+	ierr = nc_def_var_chunking(ncid,cmor_vars[var_id].nc_var_id,NC_CHUNKED,&nc_dim_chunking[0]);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NCError (%i) defining chunking parameters for variable '%s'",ierr,cmor_vars[var_id].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+
+
+    /* Done with NetCDF file definitions */
+    ierr = nc_enddef(ncid);
+    if (ierr != NC_NOERR && ierr != NC_ENOTINDEFINE) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) leaving definition mode for file %s",ierr,outname);cmor_handle_error(msg,CMOR_CRITICAL);}
+    ierr = nc_enddef(ncafid);
+    if (ierr != NC_NOERR && ierr != NC_ENOTINDEFINE) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) leaving definition mode for metafile %s",ierr,cmor_current_dataset.associated_file_name);cmor_handle_error(msg,CMOR_CRITICAL);}
+    
+    /* Write non time dimension of variable into the NetCDF file */
+
+    l = 1;
+    if (cmor_axes[cmor_vars[var_id].axes_ids[0]].axis!='T') {
+      l=0;
+    }
+    for(i=l;i<cmor_vars[var_id].ndims;i++) {
+      /* for(j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) printf("axis %s : writing value: %i, %lf\n",cmor_axes[cmor_vars[var_id].axes_ids[i]].id,j,cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]); */
+      /* at this point we need to check if the values of the axis need to be replaced (hybrid coords *//* we only need to do this if ho != hi */
+      if (cmor_axes[cmor_vars[var_id].axes_ids[i]].hybrid_out!=cmor_axes[cmor_vars[var_id].axes_ids[i]].hybrid_in) {
+	ho = 0;
+	if (cmor_axes[cmor_vars[var_id].axes_ids[i]].hybrid_out!=0) {
+	  ho = cmor_axes[cmor_vars[var_id].axes_ids[i]].hybrid_out;
+	}
+	else if (cmor_axes[cmor_vars[var_id].axes_ids[i]].hybrid_in!=0) {
+	  ho = cmor_axes[cmor_vars[var_id].axes_ids[i]].hybrid_in;
+	}
+	/*       printf("ok the hybrid out on this axis %i (%s) is: %i\n",cmor_vars[var_id].axes_ids[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].id,ho); */
+	if (ho!=0) {
+	  /* yep need to change them */
+	  if (ho==1) { /* std hyb sigma*/
+	    /* look for a coeff */
+	    k=-1;
+	    for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"a")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	    if (k==-1) {
+	      snprintf(msg,CMOR_MAX_STRING,"could not find 'a' coeff for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]=cmor_vars[k].values[j];
+	    /* look for b coeff */
+	    k=-1;
+	    for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"b")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	    if (k==-1) {
+	      snprintf(msg,CMOR_MAX_STRING,"could find 'b' coeff for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]+=cmor_vars[k].values[j];
+	    
+	    /* do we have bounds to treat as well ? */
+	    if (cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds!=NULL) {
+	      k=-1;
+	      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"a_bnds")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	      if (k==-1) {
+		snprintf(msg,CMOR_MAX_STRING,"could not find 'a_bnds' coeff for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j]=cmor_vars[k].values[j];
+	      k=-1;
+	      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"b_bnds")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	      if (k==-1) {
+		snprintf(msg,CMOR_MAX_STRING,"could find 'b_bnds' coef for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j]+=cmor_vars[k].values[j]; 
+	    }
+	    cmor_flip_hybrid(var_id,i,"a","b","a_bnds","b_bnds");
+	  }
+	  else if (ho==2) {/* alternate hyb sigma*/
+	    /* look for ap coeff */
+	    k=-1;
+	    for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"ap")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	    if (k==-1) {
+	      snprintf(msg,CMOR_MAX_STRING,"could not find 'ap' coeef for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]=cmor_vars[k].values[j]/cmor_vars[l].values[0];
+	    /* look for b coeff */
+	    k=-1;
+	    for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"b")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	    if (k==-1) {
+	      snprintf(msg,CMOR_MAX_STRING,"could find 'b' coef for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]+=cmor_vars[k].values[j];
+	    
+	    /* deals with bounds */
+	    if (cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds!=NULL) {
+	      k=-1;
+	      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"ap_bnds")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	      if (k==-1) {
+		snprintf(msg,CMOR_MAX_STRING,"could not find 'ap_bnds' coeff for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j]=cmor_vars[k].values[j]/cmor_vars[l].values[0];
+	      k=-1;
+	      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"b_bnds")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	      if (k==-1) {
+		snprintf(msg,CMOR_MAX_STRING,"could find 'b_bnds' coef for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j]+=cmor_vars[k].values[j]; 
+	    }
+	    cmor_flip_hybrid(var_id,i,"ap","b","ap_bnds","b_bnds");
+	  }
+	  else if (ho==3) { /* sigma */
+	    k=-1;
+	    for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"sigma")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	    if (k==-1) {
+	      snprintf(msg,CMOR_MAX_STRING,"could not find 'sigma' coeef for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	    for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].values[j]=cmor_vars[k].values[j];
+	    /* deals with bounds */
+	    if (cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds!=NULL) {
+	      k=-1;
+	      for(j=0;j<=cmor_nvars;j++) if ((strcmp(cmor_vars[j].id,"sigma_bnds")==0) && (cmor_vars[j].zaxis==cmor_vars[var_id].axes_ids[i])) { k=j; break;}
+	      if (k==-1) {
+		snprintf(msg,CMOR_MAX_STRING,"could not find 'sigma_bnds' coeff for axis: %s",cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+		cmor_handle_error(msg,CMOR_CRITICAL);
+	      }
+	      for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length*2;j++) cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds[j]=cmor_vars[k].values[j];
+	    }
+	  }	  
+	  cmor_flip_hybrid(var_id,i,"sigma",NULL,"sigma_bnds",NULL);
+	} 
+      }
+      if (cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues == NULL) {
+	if (cmor_axes[cmor_vars[var_id].axes_ids[i]].store_in_netcdf == 1) {
+	  ierr = nc_put_var_double(ncid,nc_vars[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].values);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) writing axis '%s' values",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	  if (ncid!=ncafid) {
+	    ierr = nc_put_var_double(ncafid,nc_vars_af[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].values);
+	    if (ierr != NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) writing axis '%s' values to metafile",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	  }
+	}
+      }
+      else {
+	for (j=0;j<cmor_axes[cmor_vars[var_id].axes_ids[i]].length;j++) {
+	  starts[0]=j;
+	  starts[1]=0;
+	  counts[0]=1;
+	  counts[1]=strlen(cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues[j]);
+	  ierr = nc_put_vara_text(ncid,nc_vars[i],starts,counts,cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues[j]);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) writing axis '%s' value number %d (%s)",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id,j,cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues[j]);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	  if (ncid!=ncafid) {
+	    ierr = nc_put_vara_text(ncafid,nc_vars_af[i],starts,counts,cmor_axes[cmor_vars[var_id].axes_ids[i]].cvalues[j]);
+	    if (ierr != NC_NOERR) {
+	      snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i) writing axis '%s' values to metafile",ierr,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    }
+	  }
+	}
+      }
+      /* ok do we have bounds on this axis? */
+      if (cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds!=NULL) {
+	ierr = nc_put_var_double(ncafid,nc_bnds_vars[i],cmor_axes[cmor_vars[var_id].axes_ids[i]].bounds);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NC error (%i) on variable %s writing bounds for dim %i (%s)",ierr,cmor_vars[var_id].id,i,cmor_axes[cmor_vars[var_id].axes_ids[i]].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+
+    /* ok now need to write grid variables */
+    if (cmor_vars[var_id].grid_id>-1) {
+      if (cmor_grids[cmor_vars[var_id].grid_id].istimevarying==0) {
+	for (i=0;i<4;i++) {
+	  j = cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i];
+	  if (j!=-1) { /* we need to write this variable */
+	    cmor_vars[j].nc_var_id = nc_associated_vars[i];
+	    switch (i) {
+	    case (0) :
+	      cmor_write_var_to_file(ncafid,&cmor_vars[j],cmor_grids[cmor_vars[var_id].grid_id].lats,'d',0,NULL,NULL);
+	      break;
+	    case (1) :
+	      cmor_write_var_to_file(ncafid,&cmor_vars[j],cmor_grids[cmor_vars[var_id].grid_id].lons,'d',0,NULL,NULL);
+	      break;
+	    case (2) :
+	      cmor_write_var_to_file(ncafid,&cmor_vars[j],cmor_grids[cmor_vars[var_id].grid_id].blats,'d',0,NULL,NULL);
+	      break;
+	    case (3) :
+	      cmor_write_var_to_file(ncafid,&cmor_vars[j],cmor_grids[cmor_vars[var_id].grid_id].blons,'d',0,NULL,NULL);
+	      break;
+	      /* 	  case (4) : */
+	      /* 	    cmor_write_var_to_file(ncafid,&cmor_vars[j],cmor_grids[cmor_vars[var_id].grid_id].area,'d',0,NULL,NULL); */
+	      /* 	    break; */
+	    default :
+	      break;
+	    }
+	  }
+	}
+      }
+    }
+	
+    /* ok now write the zfactor values if necessary */
+    for(i=0;i<nzfactors;i++) {
+      if (cmor_vars[zfactors[i]].values != NULL) {/* ok this one has value defined we need to store it */
+	cmor_vars[zfactors[i]].nc_var_id = nc_zfactors[i];
+	cmor_write_var_to_file(ncafid,&cmor_vars[zfactors[i]],cmor_vars[zfactors[i]].values,'d',0,NULL,NULL);
+      }
+/*       if (cmor_vars[zfactors[i]].bounds != NULL) {/\* ok this one has value defined we need to store it *\/ */
+/* 	printf("writing bounds to nc file variable: %s, ncvar: %i\n",cmor_vars[zfactors[i]].id,nc_zfactors[i+1]); */
+/* 	cmor_vars[zfactors[i+1]].nc_var_id = nc_zfactors[i+1]; */
+/* 	cmor_write_var_to_file(ncid,&cmor_vars[zfactors[i+1]],&cmor_vars[zfactors[i]].bounds,0,NULL); */
+/* 	i++; */
+/*       } */
+    }
+    /* Write singleton dimension variables */
+    for(i=0;i<CMOR_MAX_DIMENSIONS;i++) {
+      j = cmor_vars[var_id].singleton_ids[i];
+      if (j!=-1) {
+	ierr = nc_put_var_double(ncid,nc_singletons[i],cmor_axes[j].values);
+	if (ierr != NC_NOERR) {
+	  snprintf(msg,CMOR_MAX_STRING,"NCError (%i) writing scalar variable %s for variable %s, value: %lf",ierr,cmor_axes[j].id,cmor_vars[var_id].id,cmor_axes[j].values[0]);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	/* now see if we need bounds */
+	if (cmor_axes[j].bounds!=NULL) { /*yep */
+	  ierr = nc_put_var_double(ncid,nc_singletons_bnds[i],cmor_axes[j].bounds);
+	  if (ierr != NC_NOERR) {
+	    snprintf(msg,CMOR_MAX_STRING,"NCError (%i) writing scalar bounds variable %s for variable %s, values: %lf, %lf",ierr,cmor_axes[j].id,cmor_vars[var_id].id,cmor_axes[j].bounds[0],cmor_axes[j].bounds[1]);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+      }
+    }
+    cmor_current_dataset.associate_file=ncafid;
+  }
+  else { 
+    /* Variable already been thru cmor_write, we just get the netcdf file id */
+    ncid=cmor_vars[varid].initialized;
+
+  /* generates a new unique id */
+    uuid_create(&myuuid);
+    uuid_make(myuuid,4);
+    myuuid_str = NULL;
+    fmt = UUID_FMT_STR;
+    uuid_export(myuuid,fmt,&myuuid_str,&uuidlen);
+    strncpy(cmor_current_dataset.tracking_id,(char *)myuuid_str,CMOR_MAX_STRING);
+    cmor_set_cur_dataset_attribute("tracking_id",cmor_current_dataset.tracking_id,0);
+
+    ierr = nc_put_att_text(ncid, NC_GLOBAL, "tracking_id",(int)uuidlen,myuuid_str);
+    free(myuuid_str);
+    uuid_destroy(myuuid);
+
+    if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) for variable %s writing global att: %s (%s)",ierr,cmor_vars[var_id].id,cmor_current_dataset.attributes_names[i],cmor_current_dataset.attributes_values[i]); cmor_handle_error(msg,CMOR_CRITICAL);}
+    cmor_vars[var_id].time_nc_id=cmor_vars[varid].time_nc_id; /* in case we are doing a zfactor var */
+    cmor_vars[var_id].time_bnds_nc_id=cmor_vars[varid].time_bnds_nc_id; /* in case we are doing a zfactor var */
+  }
+
+  /* here we add the number of time written for the associated variable */
+  if ((refvar!=NULL) && (cmor_vars[varid].grid_id>-1) && (cmor_grids[cmor_vars[varid].grid_id].istimevarying==1)) {
+    for (i=0;i<4;i++) {
+      if (cmor_grids[cmor_vars[varid].grid_id].associated_variables[i] == var_id) {
+	if (cmor_vars[varid].ntimes_written_coords[i]==-1) {
+	  cmor_vars[varid].ntimes_written_coords[i]=ntimes_passed;
+	}
+	else {
+	  cmor_vars[varid].ntimes_written_coords[i]+=ntimes_passed;
+	}
+      }
+    }
+  }
+  if (refvar!=NULL) {
+    for(i=0;i<10;i++) {
+      if (cmor_vars[*refvar].associated_ids[i]==var_id) {
+	if (cmor_vars[*refvar].ntimes_written_associated[i] == 0) {
+	  cmor_vars[*refvar].ntimes_written_associated[i] = ntimes_passed;
+	}
+	else {
+	  cmor_vars[*refvar].ntimes_written_associated[i] += ntimes_passed;
+	}
+      }
+    }
+  }
+  cmor_write_var_to_file(ncid,&cmor_vars[var_id],data,type,ntimes_passed,time_vals,time_bounds);
+  cmor_pop_traceback();
+  return 0;
+};
+
+
+
+int cmor_create_output_path(int var_id,char *outpath)
+{
+  /* reconstruct the suggested outpath structure */
+  /* returns 1 if it is a fixed filed 0 otherwise */
+  char tmp[CMOR_MAX_STRING],tmp2[CMOR_MAX_STRING];
+  int i,j;
+  double interval;
+  int createdirs;
+  int nurls = 4;
+  char urls[4][20] = { "http:", "https:", "HTTP:", "HTTPS:"};
+  int isfixed = 0;
+  extern int cmor_convert_char_to_hyphen(char c);
+
+  cmor_add_traceback("cmor_create_output_path");
+  /* user's base path */
+  strncpytrim(outpath,cmor_current_dataset.outpath,CMOR_MAX_STRING);
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+
+  /* decides if it is a URL or not, if it is no directory creation */
+  createdirs =1;
+  for (i=0;i<nurls;i++) {
+    if (strncmp(outpath,urls[i],strlen(urls[i]))==0) createdirs=0;
+  }
+  /* activity */
+  strncpytrim(tmp,cmor_tables[cmor_vars[var_id].ref_table_id].project_id,CMOR_MAX_STRING);
+  /* make sure you replace spaces with "_" */
+  for(i=0;i<strlen(tmp);i++) {
+    if (tmp[i]==' ') tmp[i]='_';
+  }
+  strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  /* product */
+  strncpytrim(tmp,cmor_tables[cmor_vars[var_id].ref_table_id].product,CMOR_MAX_STRING);
+  /* make sure you replace spaces with "_" */
+  for(i=0;i<strlen(tmp);i++) {
+    if (tmp[i]==' ') tmp[i]='_';
+  }
+  strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  /* institute */
+  cmor_get_cur_dataset_attribute("institute_id",tmp);
+  if (strcmp(tmp,"not specified")==0) {
+    strcpy(tmp,"INSTITUTE_ID");
+  }
+  strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  
+  /*model id */
+  if ( cmor_has_cur_dataset_attribute("model_id")==0) {
+    cmor_get_cur_dataset_attribute("model_id",tmp);
+    for (i=0;i<strlen(tmp);i++) {
+      if (cmor_convert_char_to_hyphen(tmp[i])==1) {
+	  tmp[i]='-';
+	}
+    }
+    /* removes trailing "-" */
+    for (i=strlen(tmp)-1;i>0;i--) {
+      if (tmp[i]=='-') {
+	tmp[i]='\0';
+      }
+      else {
+	break;
+      }
+    }
+    strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+    strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  }
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+
+  /* experiment id */
+  cmor_get_cur_dataset_attribute("experiment_id",tmp);
+  /* ok here we need to reset the expt id to the shrt name if necessary */
+  for (i=0;i<=cmor_tables[cmor_vars[var_id].ref_table_id].nexps;i++) {
+/*     printf("i: %i, lng expt: %s\n",i,cmor_tables[cmor_vars[var_id].ref_table_id].expt_ids[i]); */
+/*     printf("i: %i, sht expt: %s\n",i,cmor_tables[cmor_vars[var_id].ref_table_id].sht_expt_ids[i]); */
+    j = strlen(tmp);
+    if (strncmp(cmor_tables[cmor_vars[var_id].ref_table_id].expt_ids[i],tmp,j)==0) {
+      if (strlen(cmor_tables[cmor_vars[var_id].ref_table_id].sht_expt_ids[i])!=0) {
+	strncpy(tmp2,cmor_tables[cmor_vars[var_id].ref_table_id].sht_expt_ids[i],j-4);
+	tmp2[j-4]='\0';
+	if (j>4) {
+	  strncpy(&tmp2[j-4],&tmp[j-4],4);
+	  tmp2[j]='\0';
+	}
+      }
+      else {
+	strcpy(tmp2,"");
+      }
+      strcpy(tmp,tmp2);
+      break;
+    }
+  }
+  if (strcmp(tmp,"")!=0) {
+    strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+    strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  }
+/*   else { */
+/*     strcpy(tmp,"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); */
+/*     cmor_handle_error(tmp,CMOR_CRITICAL); */
+/*   } */
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+
+  /* frequency */
+  if ((cmor_tables[cmor_vars[var_id].ref_table_id].frequency[0]=='\0') &&
+      (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].frequency[0]=='\0') ) {
+    /* need to figure out the approximate interval */
+    if ((cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].axis!='T') ) {
+      strcpy(tmp,"fx");
+      isfixed =1;
+    }
+    else {
+      interval = cmor_convert_interval_to_seconds(cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].interval,cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].units);
+      if (interval<2500.) { 
+	strcpy(tmp,"subhr");
+      }
+      else if (interval<15000.) {
+	strcpy(tmp,"3hr");
+      }
+      else if (interval<30000.) {
+	strcpy(tmp,"6hr");
+      }
+      else if (interval<100000.) {
+	strcpy(tmp,"day");
+      }
+      else if (interval<3.E6) {
+	strcpy(tmp,"mon");
+      }
+      else {
+	strcpy(tmp,"yr");
+      }
+      if (interval == 0.) {
+	strcpy(tmp,"fx");
+	isfixed=1;
+      }
+    }
+  }
+  else if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].frequency[0]!='\0') {
+    strncpy(tmp,cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].frequency,CMOR_MAX_STRING);
+  }
+  else {
+    strncpy(tmp,cmor_tables[cmor_vars[var_id].ref_table_id].frequency,CMOR_MAX_STRING);
+    if (strcmp(tmp,"fx")==0) isfixed=1;
+  }
+
+  /*Ok in case of climatology needs to add "clim" to it */
+  if (cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].climatology==1) {
+	strncat(tmp,"Clim",CMOR_MAX_STRING-strlen(tmp));	
+  }
+  strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  cmor_set_cur_dataset_attribute("frequency",tmp,1);
+  
+  /* realm */
+  /* first check if the variable itslef has a realm */
+  if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[0]!='\0') {
+    /* we want to copy only the first realm here */
+    for (i=0;i<strlen(cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm);i++) {
+      if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[i]!=' ') {
+	tmp[i]=cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].realm[i];
+	tmp[i+1]='\0';
+      }
+      else {
+	break;
+      }
+    }
+    strncattrim(outpath,tmp,CMOR_MAX_STRING-strlen(outpath));
+  }
+  else { /*ok it didn't so we're using the value from the table */
+    strncattrim(outpath,cmor_tables[cmor_vars[var_id].ref_table_id].realm,CMOR_MAX_STRING-strlen(outpath));
+  }
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  
+  /* var id */
+  strncattrim(outpath,cmor_vars[var_id].id,CMOR_MAX_STRING-strlen(outpath));
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  
+  if (isfixed==1) {
+    strncat(outpath,"r0i0p0",CMOR_MAX_STRING-strlen(outpath) );
+    cmor_set_cur_dataset_attribute("physics_version","0",0);
+    cmor_set_cur_dataset_attribute("initialization_method","0",0);
+  }
+  else {
+    /*realization */
+    snprintf(tmp,CMOR_MAX_STRING,"r%d",cmor_current_dataset.realization);
+    strncat(outpath,tmp,CMOR_MAX_STRING-strlen(outpath) );
+    
+    /* initialization id (optional) */
+    if ( cmor_has_cur_dataset_attribute("initialization_method")==0) {
+      cmor_get_cur_dataset_attribute("initialization_method",tmp);
+      sscanf(tmp,"%i",&i);
+      snprintf(tmp,CMOR_MAX_STRING,"i%d",i);
+      strncat(outpath,tmp,CMOR_MAX_STRING-strlen(outpath) );
+    }
+    
+    /* physics id (optional) */
+    if ( cmor_has_cur_dataset_attribute("physics_version")==0) {
+      cmor_get_cur_dataset_attribute("physics_version",tmp);
+      sscanf(tmp,"%i",&i);
+      snprintf(tmp,CMOR_MAX_STRING,"p%d",i);
+      strncat(outpath,tmp,CMOR_MAX_STRING-strlen(outpath) );
+    }
+  }
+  strncat(outpath,"/",CMOR_MAX_STRING-strlen(outpath));
+  if (createdirs==1) {
+    if ((mkdir(outpath, (S_IRWXU | S_IRWXG | S_IRWXO )) == -1) && (errno != EEXIST)) {
+      sprintf(tmp,"creating outpath: %s, not enough permission?",outpath);
+      cmor_handle_error(tmp,CMOR_CRITICAL);
+    }
+  }
+  cleanup_varid=-1;
+  cmor_pop_traceback();
+  return isfixed;
+}
+
+int cmor_close_variable(int var_id, char *file_name, int *preserved_var_id) 
+{
+  int ierr;
+  extern int cmor_nvars;
+  char outname[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  char ctmp2[CMOR_MAX_STRING];
+  cdCalenType icalo;
+  cdCompTime comptime;
+  int i,j,n;
+  double interval;
+  /* these are for recopying in case of preserve */
+  char attribute_types[CMOR_MAX_ATTRIBUTES]; /*stores attributes type */
+  char attributes[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING]; /*stores attributes names */
+  char attributes_values_char[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING];
+  double attributes_values_num[CMOR_MAX_ATTRIBUTES];
+  int nattributes ; /* number of  attributes */
+  char itype;
+  double miss;
+  char iunits[CMOR_MAX_STRING];
+  int axes_ids[CMOR_MAX_DIMENSIONS];
+  int ndims;
+  double tolerance;
+  char positive;
+
+  cmor_add_traceback("cmor_close_variable");
+  cmor_is_setup();
+
+  cleanup_varid=var_id;
+
+  if (cmor_vars[var_id].initialized != -1) {
+    ierr = nc_close(cmor_vars[var_id].initialized);
+    
+    if (ierr != NC_NOERR) {
+      snprintf(msg,CMOR_MAX_STRING,"NCError (%i) closing variable %s!",ierr,cmor_vars[var_id].id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    
+
+    /* Ok we need to make the associated variables have been written in the case of a time varying grid */
+    if ((cmor_vars[var_id].grid_id>-1) && (cmor_grids[cmor_vars[var_id].grid_id].istimevarying==1)) {
+      for (i=0;i<4;i++) {
+	if (cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i]!=-1) { /* ok this associated coord should be stored */
+	  if (cmor_vars[var_id].ntimes_written!=cmor_vars[var_id].ntimes_written_coords[i]) {
+	    /* ok we either wrote more or less data but in any case not the right amount! */
+	    if (cmor_vars[var_id].ntimes_written==0) {
+	      for (j=0;j<cmor_vars[var_id].ndims;j++) {
+		if (cmor_axes[cmor_vars[var_id].axes_ids[j]].axis=='T') {
+		  sprintf(ctmp2,"%i",cmor_axes[cmor_vars[var_id].axes_ids[j]].length);
+		  break;
+		}
+	      }
+	    }
+	    else {
+	      sprintf(ctmp2,"%i",cmor_vars[var_id].ntimes_written);
+	    }
+	    if (cmor_vars[var_id].ntimes_written_coords[i]==-1) {
+	      sprintf(ctmp,"no");
+	    }
+	    else {
+	      sprintf(ctmp,"%i",cmor_vars[var_id].ntimes_written_coords[i]);
+	    }
+	    snprintf(msg,CMOR_MAX_STRING,"while closing variable %i (%s) we noticed it has a time varying grid, you wrote %s time steps for the variable, but its associated variable %i (%s) has %s times written", cmor_vars[var_id].self, cmor_vars[var_id].id, ctmp2, cmor_vars[cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i]].self,cmor_vars[cmor_grids[cmor_vars[var_id].grid_id].associated_variables[i]].id,ctmp);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+      }
+    }
+    for (i=0;i<10;i++) {
+      if (cmor_vars[var_id].associated_ids[i]!=-1) {
+	if (cmor_vars[var_id].ntimes_written != cmor_vars[var_id].ntimes_written_associated[i]) {
+	  sprintf(ctmp2,"%i",cmor_vars[var_id].ntimes_written);
+	  sprintf(ctmp,"%i",cmor_vars[var_id].ntimes_written_associated[i]);
+	  snprintf(msg,CMOR_MAX_STRING,"while closing variable %i (%s) we noticed it has a time varying associated variable, you wrote %s time steps for the variable, but its associated variable %i (%s) has %s times written", cmor_vars[var_id].self, cmor_vars[var_id].id, ctmp2, cmor_vars[cmor_vars[var_id].associated_ids[i]].self,cmor_vars[cmor_vars[var_id].associated_ids[i]].id,ctmp);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+    /* ok at that point we need to construct the final name! */
+    strncpytrim(outname,cmor_vars[var_id].base_path,CMOR_MAX_STRING);
+    
+    if (cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].axis=='T') {
+      cmor_get_axis_attribute(cmor_vars[var_id].axes_ids[0],"units",'c',&msg);
+      cmor_get_cur_dataset_attribute("calendar",msg2);
+      
+      if (cmor_calendar_c2i(msg2,&icalo)!=0) {
+	snprintf(msg,CMOR_MAX_STRING,"Cannot convert times for calendar: %s",msg2);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+	cmor_pop_traceback();
+	return 1;
+      }
+      
+      /* ok makes a comptime out of input */
+      cdRel2Comp(icalo,msg,cmor_vars[var_id].first_time,&comptime);
+      
+      /* need to figure out the approximate interval */
+      interval  = cmor_convert_interval_to_seconds(cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].interval,cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].units);
+      
+      
+      /*       printf("interval: %lf\n",interval); */
+      /* first time point */
+      strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+      snprintf(msg2,CMOR_MAX_STRING,"%.4ld",comptime.year);
+      strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      if (interval<29.E6) { /* less than a year */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",comptime.month);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<2.E6) { /* less than a month */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",comptime.day);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<86000) { /* less than a day */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",(int)comptime.hour);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<3000) { /* less than an hour */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",(int)comptime.hour*60);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<50) { /* less than an minute */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",(int)comptime.hour*3600);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      
+      
+      cdRel2Comp(icalo,msg,cmor_vars[var_id].last_time,&comptime);
+      
+      /* separator between first and last time */
+      strncat(outname,"-",CMOR_MAX_STRING-strlen(outname));
+      
+      /* last time point */
+      snprintf(msg2,CMOR_MAX_STRING,"%.4ld",comptime.year);
+      strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      if (interval<29.E6) { /* less than a year */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",comptime.month);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<2.E6) { /* less than a month */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",comptime.day);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<86000) { /* less than a day */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",(int)comptime.hour);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<3000) { /* less than an hour */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",(int)comptime.hour*60);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      if (interval<50) { /* less than an minute */
+	snprintf(msg2,CMOR_MAX_STRING,"%.2i",(int)comptime.hour*3600);
+	strncat(outname,msg2,CMOR_MAX_STRING-strlen(outname));
+      }
+      
+      if (cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].climatology==1) {
+	strncat(outname,"_clim",CMOR_MAX_STRING-strlen(outname));	
+      }
+    }
+/*     else { */
+/*       printf("first axis is not time axis ?\n"); */
+/*     } */
+    if (cmor_vars[var_id].suffix_has_date==1) {
+      /* all right we need to pop out the date part.... */
+      n = strlen(cmor_vars[var_id].suffix);
+      i=0;
+      while (cmor_vars[var_id].suffix[i]!='_') i++;
+      i++;
+      while ((cmor_vars[var_id].suffix[i]!='_') && i<n) i++;
+      /* ok now we have the length of dates */
+      /* at this point we are either at the _clim the actual _suffix or the end (==nosuffix) */
+      /* checking if _clim needs to be added */
+      if (cmor_tables[cmor_axes[cmor_vars[var_id].axes_ids[i]].ref_table_id].axes[cmor_axes[cmor_vars[var_id].axes_ids[0]].ref_axis_id].climatology==1) {
+	i+=5;
+      }
+      strcpy(msg,"");
+      for (j=i;j<n;j++) {
+	msg[j-i]=cmor_vars[var_id].suffix[i];
+	msg[j-i+1]='\0';
+      }
+    }
+    else {
+      strncpy(msg,cmor_vars[var_id].suffix,CMOR_MAX_STRING);
+    }
+    
+    if (strlen(msg)>0) {
+      strncat(outname,"_",CMOR_MAX_STRING-strlen(outname));
+      strncat(outname,msg,CMOR_MAX_STRING-strlen(outname));
+    }
+    
+    strncat(outname,".nc",CMOR_MAX_STRING-strlen(outname));
+    
+    
+    /* ok now we can actually move the file */
+    /*     printf("moving: %s to %s\n",cmor_vars[var_id].current_path,outname); */
+    /* here we need to make sure we are not in preserve mode! */
+    if ((CMOR_NETCDF_MODE == CMOR_PRESERVE_4) || (CMOR_NETCDF_MODE == CMOR_PRESERVE_3)) {
+      FILE *fperr;
+    /* ok first let's check if the file does exists or not */
+      fperr = NULL;
+      fperr=fopen(outname,"r");
+      if ( fperr != NULL) {
+	sprintf(msg,"%s.copy",outname);
+	if (rename(cmor_vars[var_id].current_path,msg)==0 ) {
+	  snprintf(msg,CMOR_MAX_STRING,"Output file ( %s ) already exists, remove file or use CMOR_REPLACE or CMOR_APPEND for CMOR_NETCDF_MODE value in cmor_setup for convenience the file you were trying to write has been saved at: %s.copy",outname,outname);
+	}
+	else {
+	  snprintf(msg,CMOR_MAX_STRING,"Output file ( %s ) already exists, remove file or use CMOR_REPLACE or CMOR_APPEND for CMOR_NETCDF_MODE value in cmor_setup.",outname);
+	}
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+    }
+    if (rename(cmor_vars[var_id].current_path,outname)!=0) {
+      snprintf(msg,CMOR_MAX_STRING,"could not rename temporary file: %s to final file name: %s",cmor_vars[var_id].current_path,outname);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (file_name!=NULL) {
+      strncpy(file_name,outname,CMOR_MAX_STRING);
+    }
+
+    if (preserved_var_id != NULL) {
+      /* ok we want to redefine the var to use it in another file */
+      strncpy(msg,cmor_vars[var_id].id,CMOR_MAX_STRING);
+      strncpy(iunits,cmor_vars[var_id].iunits,CMOR_MAX_STRING);
+      ndims = cmor_vars[var_id].ndims;
+      for (i=0;i<ndims;i++) {
+	axes_ids[i]=cmor_vars[var_id].original_order[i];
+      }
+      itype = cmor_vars[var_id].itype;
+      miss = cmor_vars[var_id].missing;
+      tolerance=cmor_vars[var_id].tolerance;
+      if (cmor_vars[var_id].sign==1) {
+	positive = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].positive;
+      }
+      else {
+	if (cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id].positive=='u') {
+	  positive='d';
+	}
+	else {
+	  positive='u';
+	}
+      }
+      msg2[0]='\0';
+      if (cmor_has_variable_attribute(var_id,"history")==0) {
+	cmor_get_variable_attribute(var_id,"history",msg2);
+	for (i=0;i<strlen(msg2);i++) {
+	  if (strncmp(&msg2[i],"altered by CMOR",15)==0) {
+	    /* ok we found the first spot of alteration */
+	    break;
+	  }
+	}
+	if (i!=strlen(msg2)) {/*ok we found it*/
+	  i-=21;
+	}
+	for (j=0;j<i;j++) {
+	  ctmp[j]=msg2[j];
+	}
+	ctmp[j]='\0';
+	strcpy(msg2,ctmp);
+      }
+      ctmp2[0]='\0';
+      if (cmor_has_variable_attribute(var_id,"comment")==0) {
+	cmor_get_variable_attribute(var_id,"comment",ctmp2);
+	for (i=0;i<strlen(ctmp2);i++) {
+	  if (strncmp(&ctmp2[i],"_table_comment",14)==0) {
+	    /* ok we found the first spot of alteration */
+	    break;
+	  }
+	}
+	if (i!=strlen(ctmp2)) {/*ok we found it*/
+	  i-=strlen(cmor_tables[cmor_vars[var_id].ref_table_id].project_id)+2;
+	}
+	for (j=0;j<i;j++) {
+	  ctmp[j]=ctmp2[j];
+	}
+	ctmp[j]='\0';
+	strcpy(ctmp2,ctmp);
+      }
+      nattributes = cmor_vars[var_id].nattributes;
+      for (i=0;i<nattributes;i++) {
+	attribute_types[i]=cmor_vars[var_id].attributes_type[i];
+	strcpy(attributes[i],cmor_vars[var_id].attributes[i]);
+	if (attribute_types[i]=='c') {
+	  strcpy(attributes_values_char[i],cmor_vars[var_id].attributes_values_char[i]);
+	}
+	else {
+	  attributes_values_num[i]=cmor_vars[var_id].attributes_values_num[i];
+	}
+      }
+    }
+
+    cmor_reset_variable(var_id);
+
+    if (preserved_var_id != NULL) {
+      if (itype=='d') {
+	cmor_variable(preserved_var_id,msg,iunits,ndims,axes_ids,itype,&miss,&tolerance,&positive,NULL,msg2,ctmp);
+      }
+      else if (itype=='f') {
+	cmor_variable(preserved_var_id,msg,iunits,ndims,axes_ids,itype,(float *)&miss,&tolerance,&positive,NULL,msg2,ctmp);
+      }
+      else if (itype=='i') {
+	cmor_variable(preserved_var_id,msg,iunits,ndims,axes_ids,itype,(int *)&miss,&tolerance,&positive,NULL,msg2,ctmp);
+      }
+      for (i=0;i<nattributes;i++) {
+	if (strcmp(attributes[i],"cell_methods")==0) continue;
+	if (attribute_types[i]=='c') {
+	  cmor_set_variable_attribute(*preserved_var_id,attributes[i],'c',attributes_values_char[i]);
+	}
+	else {
+	  cmor_set_variable_attribute(*preserved_var_id,attributes[i],attribute_types[i],&attributes_values_num[i]);
+	}
+      }
+      if (msg2[0]!='\0') cmor_set_variable_attribute(*preserved_var_id,"history",'c',msg2);
+      if (ctmp2[0]!='\0')cmor_set_variable_attribute(*preserved_var_id,"comment",'c',ctmp2);
+
+    }
+    else {
+      cmor_vars[var_id].closed=1;
+    }
+  }
+  cleanup_varid=-1;
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_close(void) 
+{
+  int i,ierr,j;
+  extern int cmor_nvars;
+  char msg[CMOR_MAX_STRING];
+  extern ut_system *ut_read;
+  extern FILE *output_logfile;
+
+  cmor_add_traceback("cmor_close");
+  cmor_is_setup();
+  if (output_logfile == NULL) output_logfile = stderr;
+  /*ut_free_system(ut_read);*/
+/*   if (ut_get_status() != UT_SUCCESS) { */
+/*     snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units system"); */
+/*     cmor_handle_error(msg,CMOR_CRITICAL); */
+/*   } */
+  for (i=0;i<cmor_nvars+1;i++) {
+    if (cmor_vars[i].initialized != -1) {
+      if (cmor_vars[i].closed==0) {
+	ierr = cmor_close_variable(i,NULL,NULL);
+      }
+    }
+    else if ((cmor_vars[i].needsinit==1)&&(cmor_vars[i].closed!=1)) {
+      snprintf(msg,CMOR_MAX_STRING,"variable %s (%i) has been defined but never initialized",cmor_vars[i].id,i);
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+  }
+  for (i=0;i<CMOR_MAX_TABLES;i++) {
+    for(j=0;j<CMOR_MAX_ELEMENTS;j++) {
+      if (cmor_tables[i].axes[j].requested!=NULL) {free(cmor_tables[i].axes[j].requested);cmor_tables[i].axes[j].requested=NULL;}
+      if (cmor_tables[i].axes[j].requested_bounds!=NULL) {free(cmor_tables[i].axes[j].requested_bounds);cmor_tables[i].axes[j].requested_bounds=NULL;}
+      if (cmor_tables[i].axes[j].crequested!=NULL) {free(cmor_tables[i].axes[j].crequested);cmor_tables[i].axes[j].crequested=NULL;}  
+    }
+    if (cmor_tables[i].nforcings>0) {
+      for (j=0;j<cmor_tables[i].nforcings;j++) {
+	free(cmor_tables[i].forcings[i]);
+	cmor_tables[i].forcings[i]=NULL;
+      }
+      free(cmor_tables[i].forcings);
+      cmor_tables[i].forcings=NULL;
+      cmor_tables[i].nforcings=0;
+    }
+  }
+  for (i=0;i<CMOR_MAX_GRIDS;i++) {
+    if (cmor_grids[i].lons!=NULL) {free(cmor_grids[i].lons);cmor_grids[i].lons=NULL;}
+    if (cmor_grids[i].lats!=NULL) {free(cmor_grids[i].lats);cmor_grids[i].lats=NULL;}
+    if (cmor_grids[i].blons!=NULL) {free(cmor_grids[i].blons);cmor_grids[i].blons=NULL;}
+    if (cmor_grids[i].blats!=NULL) {free(cmor_grids[i].blats);cmor_grids[i].blats=NULL;}
+/*     if (cmor_grids[i].area!=NULL) {free(cmor_grids[i].area);cmor_grids[i].area=NULL;} */
+/*     if (cmor_grids[i].volumes!=NULL) {free(cmor_grids[i].volumes);cmor_grids[i].volumes=NULL;} */
+  }
+  if (cmor_nerrors!=0 || cmor_nwarnings!=0) {
+    fprintf(output_logfile,"------\nCMOR is now closed.\n------\nDuring execution we encountered:\n");
+#ifdef COLOREDOUTPUT
+    fprintf(output_logfile,"%c[%d;%dm",0X1B,1,34);
+#endif
+    fprintf(output_logfile,"%3i Warning(s)",cmor_nwarnings);
+#ifdef COLOREDOUTPUT
+    fprintf(output_logfile,"%c[%dm",0X1B,0);
+#endif
+    fprintf(output_logfile,"\n");
+#ifdef COLOREDOUTPUT
+    fprintf(output_logfile,"%c[%d;%dm",0X1B,1,31);
+#endif
+    fprintf(output_logfile,"%3i Error(s)",cmor_nerrors);
+#ifdef COLOREDOUTPUT
+    fprintf(output_logfile,"%c[%dm",0X1B,0);
+#endif
+    fprintf(output_logfile,"\n------\nPlease review them.\n------\n");
+  }
+  else {
+    fprintf(output_logfile,"------\nCMOR is now closed.\n------\n\nWe encountered no warnings or errors during execution\n------\nCongratulations!\n------\n");
+  }
+  if (output_logfile != stderr) fclose(output_logfile);
+  cmor_pop_traceback();
+  return 0;
+}
+
+void cmor_trim_string(char *in,char *out) {
+  int n,i,j;
+
+  if (in==NULL) {
+    out=NULL;
+    return;
+  }
+  n = strlen(in);
+
+  if (n==0) {
+    out[0]='\0';
+    return;
+  }
+  if (n>CMOR_MAX_STRING) n=CMOR_MAX_STRING; /* make sure we don't go over the limit */
+  j=0;
+  for (i=0;i<n;i++) {
+    if (in[i]!=' ' && in[i]!='\n' && in[i]!='\t') {
+      break;
+    }
+    else {
+      j++;
+    }
+  }
+  for(i=j;i<n;i++) {
+    out[i-j]=in[i];
+  }
+  out[i-j]='\0';
+  n = strlen(out);
+  i=n;
+  while((out[i]=='\0' || out[i]==' ')) { out[i]='\0'; i--;}
+}
+
diff --git a/Src/cmor_axes.c b/Src/cmor_axes.c
new file mode 100644
index 0000000..6a2931a
--- /dev/null
+++ b/Src/cmor_axes.c
@@ -0,0 +1,1544 @@
+#include <stdio.h>
+#include <string.h>
+#include "cmor.h"
+#include <udunits2.h>
+#include <stdlib.h>
+#include "cdmsint.h"
+#include <math.h>
+
+int cuErrOpts =CU_VERBOSE;
+
+int cmor_calendar_c2i(char *calendar, cdCalenType *ical) {
+  cmor_add_traceback("cmor_calendar_c2i");
+  cmor_is_setup();
+  if ((strcmp(calendar,"gregorian")==0) || ((strcmp(calendar,"GREGORIAN")==0) ))*ical = cdStandard;
+  else if ((strcmp(calendar,"standard")==0) || ((strcmp(calendar,"STANDARD")==0) )) *ical = cdStandard;
+  else if ((strcmp(calendar,"proleptic_gregorian")==0) || ((strcmp(calendar,"PROLEPTIC_GREGORIAN")==0) )) *ical = cdMixed;
+  else if ((strcmp(calendar,"noleap")==0) || ((strcmp(calendar,"NOLEAP")==0) )) *ical = cdNoLeap;
+  else if ((strcmp(calendar,"365_day")==0) || ((strcmp(calendar,"365_DAY")==0) )) *ical = cdNoLeap;
+  else if ((strcmp(calendar,"360_day")==0) || ((strcmp(calendar,"360_DAY")==0) )) *ical = cd360;
+  else if ((strcmp(calendar,"julian")==0) || ((strcmp(calendar,"JULIAN")==0) )) *ical = cdJulian;
+  else if ((strcmp(calendar,"none")==0) || ((strcmp(calendar,"NONE")==0) )) *ical = cdClim;
+  else {
+    cmor_pop_traceback();
+    return 1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+double cmor_convert_interval_to_seconds( double interv, char *inunits) {
+  /* this converts times values from some units to some others */
+
+  int i,oui,n;
+  char msg[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  char sshort[6];
+  extern ut_system *ut_read;
+  ut_unit *user_units=NULL, *cmor_units=NULL;
+  cv_converter *ut_cmor_converter=NULL;
+  double tmp;
+
+  cmor_add_traceback("cmor_convert_interval_to_seconds");
+
+  strcpy(msg,"seconds");
+
+  ut_trim(msg,UT_ASCII);
+  cmor_units = ut_parse(ut_read, msg,UT_ASCII);
+
+  sshort[5]='\0';
+  /* first we need to figure out the out units */
+  /* step 1 look for the since keyword */
+  n=strlen(inunits);
+  oui=-1;
+  for (i=0;i<n;i++) {
+    strncpy(sshort,&inunits[i],5);
+    if (strcmp(sshort,"since")==0) {oui=i;break;}
+  }
+  if (oui==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Time units conversion, output units must contain the 'since' word, you defined: %s",inunits);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  strncpy(msg,inunits,oui-1);
+  msg[oui-1]='\0';
+
+  /* ok at this point we need to convert this in some base units: seconds */
+  ut_trim(msg,UT_ASCII);
+
+  user_units = ut_parse(ut_read, msg, UT_ASCII);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits parsing user units: %s",msg);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (ut_are_convertible(cmor_units,user_units)==0 ) {
+    snprintf(ctmp,CMOR_MAX_STRING,"axis interval units (%s) are incompatible with seconds",msg);
+    cmor_handle_error(ctmp,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits getting converter");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  tmp = cv_convert_double(ut_cmor_converter,interv);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits converting");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  cv_free(ut_cmor_converter);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  ut_free(user_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  ut_free(cmor_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  cmor_pop_traceback();
+  return tmp;
+}
+int cmor_convert_time_units( char *inunits, char *outunits, char *loutunits) {
+  /* this converts times values from some units to some others */
+
+  int i,oui,iui,n;
+  char msg[CMOR_MAX_STRING];
+  char sshort[6];
+  int hasqm;
+
+  cmor_add_traceback("cmor_convert_time_units");
+  cmor_is_setup();
+
+  sshort[5]='\0';
+  /* first we need to figure out the out units */
+  /* step 1 look for the since keyword */
+  n=strlen(outunits);
+  oui=-1;
+  for (i=0;i<n;i++) {
+    strncpy(sshort,&outunits[i],5);
+    if (strcmp(sshort,"since")==0) {oui=i;break;}
+  }
+  if (oui==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Time units conversion, output units must contain the 'since' word");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  /* ok now check if output units have a "?" */
+  hasqm =-1;
+  for (i=oui+5;i<n;i++)  if (outunits[i]=='?') {hasqm=i;break;}
+
+  /* here we check for the since in user units */
+  n=strlen(inunits);
+  iui=-1;
+  for (i=0;i<n;i++) {
+    strncpy(sshort,&inunits[i],5);
+    if (strcmp(sshort,"since")==0) {iui=i;break;}
+  }
+  if (iui==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Time units conversion, input units must contain the 'since' word");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  /* now construct the output units in case of a ? */
+  if (hasqm!=-1) { /* there is a ? */
+    strncpy(loutunits,outunits,oui);
+    loutunits[oui]='\0';
+    strcpy(msg,&inunits[iui]);
+    strncat(loutunits,msg,CMOR_MAX_STRING-strlen(loutunits));
+  }
+  else { /* fully defined output units */
+    strncpy(loutunits,outunits,CMOR_MAX_STRING);
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_convert_time_values( void *values_in, char type, int nvalues, double *values_out, char *inunits, char *outunits, char *calin, char *calout) {
+  /* this converts times values from some units to some others */
+
+  int i;
+  char msg[CMOR_MAX_STRING];
+  char loutunits[CMOR_MAX_STRING];
+  double dtmp;
+  cdCalenType icali, icalo;
+  cdCompTime comptime;
+
+  cmor_add_traceback("cmor_convert_time_values");
+  cmor_is_setup();
+
+
+  if (cmor_calendar_c2i(calin,&icali)!=0) {
+    snprintf(msg,CMOR_MAX_STRING,"Cannot convert times for calendar: %s",calin);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  if (cmor_calendar_c2i(calout,&icalo)!=0) {
+    snprintf(msg,CMOR_MAX_STRING,"Cannot convert times for calendar: %s",calout);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+
+  i = cmor_convert_time_units( inunits, outunits, &loutunits[0]);
+  for (i=0;i<nvalues;i++) {
+     if (type=='d') dtmp = (double)((double *)values_in)[i];
+     else if (type=='f') dtmp = (double)((float *)values_in)[i];
+     else if (type=='l') dtmp = (double)((long *)values_in)[i];
+     else if (type=='i') dtmp = (double)((int *)values_in)[i];
+     else {
+       snprintf(msg,CMOR_MAX_STRING,"cannot convert time value from '%c' type",type);
+       cmor_handle_error(msg,CMOR_CRITICAL);
+     }
+    /* ok makes a comptime out of input */
+    cdRel2Comp(icali,&inunits[0],dtmp,&comptime);
+    /* ok now converts that back to a rel units with outunits */
+    cdComp2Rel(icalo,comptime,loutunits,&dtmp);
+    values_out[i]=dtmp;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_set_axis_attribute(int id, char *attribute_name, char type, void *value)
+{
+  extern cmor_axis_t cmor_axes[];
+  char msg[CMOR_MAX_STRING];
+  int i,index;
+
+  cmor_add_traceback("cmor_set_axis_attribute");
+  cmor_is_setup();
+
+  index=-1;
+  cmor_trim_string(attribute_name,msg);
+  for (i=0;i<cmor_axes[id].nattributes;i++) {
+    if (strcmp(cmor_axes[id].attributes[i],msg)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {index=cmor_axes[id].nattributes; cmor_axes[id].nattributes+=1;}
+  strncpy(cmor_axes[id].attributes[index],msg,CMOR_MAX_STRING); /*stores the name */
+  cmor_axes[id].attributes_type[index]=type;
+  if (type=='c') {if (strlen(value)>0) strncpytrim(cmor_axes[id].attributes_values_char[index],value,CMOR_MAX_STRING);}
+  else if (type=='f')  cmor_axes[id].attributes_values_num[index] = (double)*(float*)value;
+  else if (type=='i')  cmor_axes[id].attributes_values_num[index] = (double)*(int*)value;
+  else if (type=='d') cmor_axes[id].attributes_values_num[index] = (double)*(double*)value;
+  else if (type=='l') cmor_axes[id].attributes_values_num[index] = (double)*(long*)value;
+  else {
+    snprintf(msg,CMOR_MAX_STRING,"unknown type %c allowed types are c,i,l,f,d",type);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+int cmor_get_axis_attribute(int id, char *attribute_name, char type, void *value)
+{
+  extern cmor_axis_t cmor_axes[];
+  char msg[CMOR_MAX_STRING];
+  int i,index;
+  cmor_add_traceback("cmor_get_axis_attribute");
+  cmor_is_setup();
+  index=-1;
+  for (i=0;i<cmor_axes[id].nattributes;i++) {
+    if (strcmp(cmor_axes[id].attributes[i],attribute_name)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Attribute %s could not be found for axis %i\n",attribute_name,id);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  type = cmor_axes[id].attributes_type[i];
+  if (type=='c')  strcpy(value,cmor_axes[id].attributes_values_char[index]);
+  else if (type=='f')  value = (float *)&cmor_axes[id].attributes_values_num[index];
+  else if (type=='i')  value = (int *)&cmor_axes[id].attributes_values_num[index];
+  else if (type=='d') value = (double *)&cmor_axes[id].attributes_values_num[index];
+  else if (type=='l') value = (long *)&cmor_axes[id].attributes_values_num[index];
+  cmor_pop_traceback();
+  return 0;
+}
+int cmor_has_axis_attribute(int id, char *attribute_name)
+{
+  extern cmor_axis_t cmor_axes[];
+  int i,index;
+  cmor_add_traceback("cmor_has_axis_attribute");
+  cmor_is_setup();
+  index=-1;
+  for (i=0;i<cmor_axes[id].nattributes;i++) {
+    if (strcmp(cmor_axes[id].attributes[i],attribute_name)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {
+    cmor_pop_traceback();
+    return 1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_check_values_inside_bounds(double *values,double *bounds, int length, char *name) {
+  int i;
+  char msg[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_check_values_inside_bounds");
+  for (i=0;i<length;i++) {
+    /* printf("check within: %i: %lf < %lf < %lf ???\n",i,bounds[2*i],values[i],bounds[2*i+1]); */
+    if ( ((bounds[2*i]<values[i]) && (bounds[2*i+1]<values[i])) || ((bounds[2*i]>values[i]) && (bounds[2*i+1]>values[i])) ) {
+      snprintf(msg,CMOR_MAX_STRING,"axis %s has values not within bounds at indice: %i: %lf not within: %lf, %lf",name,i,values[i],bounds[2*i],bounds[2*i+1]);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_check_monotonic(double *values,int length, char *name,int isbounds, int axis_id) {
+  int i,treatlon=0,j=0;
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  cmor_axis_def_t *refaxis;
+  int mono;
+  int nloop;
+  double *values2,tmp;
+/*   for (i=0;i<length;i++) printf("in monotonic: %i, %lf, %i\n",i,values[i],isbounds); */
+  cmor_add_traceback("cmor_check_monotonic");
+
+  refaxis = &cmor_tables[cmor_axes[axis_id].ref_table_id].axes[cmor_axes[axis_id].ref_axis_id];
+  if (refaxis->axis=='X') {
+    treatlon=1;
+  }
+  /* ok ensure that values are monotonic */
+  if (isbounds==1) {
+    for (i=0;i<length/2-2;i++) {
+      if (((values[2*i]-values[2*i+2])/(values[2*i+2]-values[2*i+4]))<0.) { 
+	if (refaxis->axis=='X') {
+	  treatlon=1;
+	}
+	else {
+	snprintf(msg,CMOR_MAX_STRING,"axis %s has non monotonic bounds values : %lf, %lf, %lf",name,values[2*i],values[2*i+2],values[2*i+4]);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+    /* printf("In is isbounds treatlon is: %i\n",treatlon); */
+    if (treatlon) {/* ok we are dealing with a longitude need to figure out the offset.... */
+      /* for (i=0;i<length;i++) printf("in monotonic: %i, %lf\n",i,values[i]); */
+     /* The VERY first thing is to make sure we are modulo 360 */
+      values2 = (double *) malloc(sizeof(double)*length);
+      for (i=0;i<length;i++) {
+	values2[i] = fmod(values[i], 360.);
+      }
+
+      /* for(i=0;i<length-1;i+=2) { */
+      /* 	fprintf(stderr,"moduloed: %i: %lf - %lf\n",i,values2[i],values2[i+1]); */
+      /* } */
+
+      /* Now keep looping until we do not have up and downs */
+      mono = -1;
+      nloop=0;
+      while (mono == -1 ) {
+	mono=1;
+	tmp=0;
+	for (i=0;i<length-4;i++) {
+	  tmp =  (values2[i]-values2[i+2])*(values2[i+2]-values2[i+4]);
+	  if (tmp<0) break;
+	}
+	if (tmp<0) { /* ok we flip floppped */
+	  tmp=values2[0];
+	  for (i=0;i<length-1;i++) {
+	    values2[i]=values2[i+1];
+	  }
+	  values2[i]=tmp;
+	  mono=-1;
+	  nloop+=1;
+	  if (nloop==length) {
+	    sprintf(msg,"longitude axis bounds are not monotonic");
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	}
+      }
+      /* for(i=0;i<length-1;i+=2) { */
+      /* 	fprintf(stderr,"ordered: %i: %lf - %lf\n",i,values2[i],values2[i+1]); */
+      /* } */
+
+      if (length>2) {
+	if (values2[0]<values2[2]) {
+	  /* first keep adding 360 until each value is greater than the previous */
+	  for (i=0;i<length-2;i++) {
+	    while (values[i+2]<values[i]) {
+	      values[i+2]+=360.;
+	    }
+	  }
+	}
+	else {
+	  /* first keep adding 360 until each value is greater than the previous */
+	  for (i=0;i<length-2;i++) {
+	    while (values[i+2]>values[i]) {
+	      values[i+2]-=360.;
+	    }
+	  }
+	}
+      }
+      free(values2);
+    
+      /* stored_direction*/
+       /* printf("------length: %i, storeddir: %c, vlue-1, vlaue0: %lf and %lf\n",length,refaxis->stored_direction,values[length-1],values[0]); */
+     if ((length>1) && (((refaxis->stored_direction=='i') && (values[length-1]<values[0])) || ((refaxis->stored_direction=='d') && (values[0]<values[length-1])))) { /* need to flip that axis */
+	if (cmor_axes[axis_id].revert==1) {
+	  snprintf(msg,CMOR_MAX_STRING, "bounds of axis %s need to be flipped but axis values did not need to. This is inconsistent",name);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	for (i=0;i<length/2;i++) {
+	  tmp = values[i];
+	  values[i] = values[length-1-i];
+	  values[length-1-i] = tmp;
+	}
+      }
+
+      /* for(i=0;i<length-1;i+=2) { */
+      /* 	fprintf(stderr,"finally: %i: %lf - %lf\n",i,values[i],values[i+1]); */
+      /* } */
+
+      /* ok make sure we have data spanning only 1 modulo */
+      if (abs(values[length-1]-values[0])>360.) {
+	snprintf(msg,CMOR_MAX_STRING,"axis %s has bounds values spanning more 360 degrees %lf, %lf",name,values[0],values[length-1]);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      /* ok now check the monotonic again */
+      for (i=0;i<length/2-2;i++) {
+	if (((values[2*i]-values[2*i+2])/(values[2*i+2]-values[2*i+4]))<0.) { 
+	  snprintf(msg,CMOR_MAX_STRING,"axis %s has really non monotonic bounds values : %lf, %lf, %lf",name,values[i],values[i+2],values[i+4]);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+      /* First of all need to check if bounds needs to be flipped */
+      j=1;
+      for (i=0;i<length-2;i+=2) {
+	if ((values[i]<values[i+1])&&(values[i]>values[i+2])) {
+	  sprintf(msg,"Axis: '%s', your bounds direction seems to be decreasing, but within cell %i they are stored increasingly: you have [%lf, %lf], but the next set is: [%lf, %lf]",name,i,values[i],values[i+1],values[i+2],values[i+3]);
+	  cmor_handle_error(msg,CMOR_WARNING);
+	  j++;
+	}
+	if ((values[i]>values[i+1]) && (values[i]<values[i+2])) {
+	  sprintf(msg,"Axis: '%s', your bounds direction seems to be increasing, but within cell %i they are stored decreasingly: you have [%lf, %lf], but the next set is: [%lf, %lf]",name,i,values[i],values[i+1],values[i+2],values[i+3]);
+	  cmor_handle_error(msg,CMOR_WARNING);
+	  j++;
+	}
+      }
+      if (j==length/2) {
+	for(i=0;i<length;i+=2) {
+	  tmp=values[i];
+	  values[i]=values[i+1];
+	  values[i+1]=tmp;
+	}
+      }
+      else if (j!=1) {
+	sprintf(msg,"Some but not all of your longitude bounds need to be flipped, see warnings ot see which ones");
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+    }
+    
+    
+     /* do not do the following in case of climatological stuff.... */
+    if (refaxis->climatology==0) {
+      for (i=0;i<length-2;i++) {
+	/* also check that bounds do not overlap */
+	if (((values[i]<values[i+1]) && (values[i+2]<values[i+1])) || ((values[i]>values[i+1]) && (values[i+2]>values[i+1]))) {
+	  snprintf(msg,CMOR_MAX_STRING,"axis %s has overlapping bounds values : %lf, %lf, %lf at index: %i",name,values[i],values[i+1],values[i+2],i);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+      for (i=0;i<length-2;i=i+2) {
+	if (values[i+1]!=values[i+2]) {
+	  snprintf(msg,CMOR_MAX_STRING,"axis %s has bounds values that leave gaps (index %i): %lf, %lf, %lf",name,i,values[i],values[i+1],values[i+2]);
+	  cmor_handle_error(msg,CMOR_WARNING);
+	}
+      }
+    }
+  }
+  else {
+    for (i=0;i<length-2;i++) {
+      if (((values[i]-values[i+1])/(values[i+1]-values[i+2]))<0.) {
+	if (refaxis->axis == 'X') { 
+	  treatlon = 1;
+	  break;
+	}
+	else {
+	  snprintf(msg,CMOR_MAX_STRING,"axis %s has non monotonic values : %lf, %lf and  %lf, %lf",name,values[2*i],values[2*i+1],values[2*i+2],values[2*i+3]);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+
+    if (treatlon) {/* ok we are dealing with a longitude need to figure out the offset.... */
+
+      /* The VERY first thing is to make sure we are modulo 360 */
+      values2 = (double *) malloc(sizeof(double)*length);
+      for (i=0;i<length;i++) {
+	values2[i] = fmod(values[i], 360.);
+      }
+
+      /* Now keep looping until we do not have up and downs */
+      mono = -1;
+      nloop=0;
+      while (mono == -1 ) {
+	mono=1;
+	tmp=0;
+	for (i=0;i<length-2;i++) {
+	  tmp =  (values2[i]-values2[i+1])*(values2[i+1]-values2[i+2]);
+	  if (tmp<0) break;
+	}
+	if (tmp<0) { /* ok we flip floppped */
+	  tmp=values2[0];
+	  for (i=0;i<length-1;i++) {
+	    values2[i]=values2[i+1];
+	  }
+	  values2[i]=tmp;
+	  mono=-1;
+	  nloop+=1;
+	  if (nloop==length) {
+	    sprintf(msg,"longitude axis is not monotonic");
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	}
+      }
+
+
+      if (length>1) {
+	if (values2[0]<values2[1]) {
+	  /* first keep adding 360 until each value is greater than the previous */
+	  for (i=0;i<length-1;i++) {
+	    while (values[i+1]<values[i]) {
+	      values[i+1]+=360.;
+	    }
+	  }
+	}
+	else {
+	  /* first keep removing 360 until each value is lower than the previous */
+	  for (i=0;i<length-1;i++) {
+	    while (values[i+1]>values[i]) {
+	      values[i+1]-=360.;
+	    }
+	  }
+	}
+      }
+      free(values2);
+
+      /* stored_direction*/
+      /* printf("length: %i, storeddir: %c, vlue-1, vlaue0: %lf and %lf\n",length,refaxis->stored_direction,values[length-1],values[0]); */
+      if ((length>1) && (((refaxis->stored_direction=='i') && (values[length-1]<values[0])) || ((refaxis->stored_direction=='d') && (values[0]<values[length-1])))) { /* need to flip that axis */
+	if ((isbounds==1)  && (cmor_axes[axis_id].revert==1)) {
+	  snprintf(msg,CMOR_MAX_STRING, "bounds of axis %s need to be flipped but axis values did not need to. This is inconsistent",name);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	cmor_axes[axis_id].revert=-1;
+	for (i=0;i<length/2;i++) {
+	  tmp = values[i];
+	  values[i] = values[length-1-i];
+	  values[length-1-i] = tmp;
+	}
+      }
+
+
+     /* ok make sure we have data spanning only 1 modulo */
+      if (abs(values[length-1]-values[0])>360.) {
+	snprintf(msg,CMOR_MAX_STRING,"axis %s has values spanning more 360 degrees %lf, %lf",name,values[0],values[length-1]);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      /* ok now check the monotonic again */
+      for (i=0;i<length-2;i++) {
+	if (((values[i]-values[i+1])/(values[i+1]-values[i+2]))<0.) {
+	  snprintf(msg,CMOR_MAX_STRING,"axis %s has non monotonic values : %lf, %lf and  %lf, %lf",name,values[2*i],values[2*i+1],values[2*i+2],values[2*i+3]);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+  }
+  /* here we check if interval is about right */
+  if ( (refaxis->axis=='T')) {
+    /* do not do the following in case of climatological stuff.... */
+    if (refaxis->climatology==0) {
+      /* just keep the begining of units out no need to know the since part */
+      j=0;
+      while (refaxis->units[j]==' ') j++;
+      i=0;
+      while ((refaxis->units[i+j]!=' ') && (refaxis->units[i+j]!='\0')) {
+	msg2[i]=refaxis->units[i+j];
+	i++;
+      }
+      msg2[i]='\0';
+      snprintf(msg,CMOR_MAX_STRING,"%lf %s",cmor_tables[cmor_axes[axis_id].ref_table_id].interval,msg2);
+      /* printf("calling chck interv: %i\n",length); */
+      /* for(i=0;i<length;i++) printf("i:%i ,val: %lf\n",i,values[i]); */
+      /* ok skip this for non standard cal */
+      
+      i = cmor_check_interval(axis_id,msg,&values[0],length,isbounds);
+    }
+  }
+  cmor_pop_traceback();
+  return treatlon;
+}
+
+
+int cmor_treat_axis_values(int axis_id, double *values, int length, int n_requested, char *units, char *name, int isbounds){
+  extern ut_system *ut_read;
+  ut_unit *user_units, *cmor_units;
+  cv_converter *ut_cmor_converter;
+  char local_unit[CMOR_MAX_STRING];
+  int i,j,treatlon=0;
+  double tmp;
+  char msg[CMOR_MAX_STRING];
+  cdCalenType acal;
+  double *tmplon;
+
+  cmor_axis_def_t *refaxis;
+  cmor_axis_t *axis;
+  int found = 0;
+  double eps,eps2;
+
+  cmor_add_traceback("cmor_treat_axis_values");
+  cmor_is_setup();
+
+  axis = &cmor_axes[axis_id];
+  refaxis = &cmor_tables[axis->ref_table_id].axes[axis->ref_axis_id];
+
+  /* for (i=0;i<length;i++) printf("isbounds: %i, i: %i, value: %lf\n",isbounds,i,values[i]); */
+
+  if (refaxis->axis=='T') {
+    /*ok this part will try to convert time values to the right units */
+    cmor_get_cur_dataset_attribute("calendar",&msg[0]);
+    if (cmor_calendar_c2i(msg,&acal)!=0) {
+      snprintf(msg,CMOR_MAX_STRING,"none standard calendar... hum we will try to accomodate this later\n");
+      cmor_handle_error(msg,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+/*     for(i=0;i<length;i++) printf("coming in values are: %i, %lf\n",i,values[i]); */
+    cmor_convert_time_values(&values[0],'d',length,&values[0],units,refaxis->units,msg,msg);
+/*     for(i=0;i<length;i++) printf("converted values are: %i, %lf\n",i,values[i]); */
+  }
+  else { /*ok using udunits to convert */
+    strcpy(local_unit,units);
+    ut_trim(local_unit,UT_ASCII);
+    user_units = ut_parse(ut_read, local_unit, UT_ASCII);
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING,"In udunits analyzing units from user (%s)",local_unit);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    if (strcmp(refaxis->units,"?")==0) strcpy(local_unit,units);
+    else strcpy(local_unit,refaxis->units);
+    ut_trim(local_unit,UT_ASCII);
+    cmor_units = ut_parse(ut_read, local_unit,UT_ASCII);
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING,"In udunits analyzing table defined units (%s) for axis: %s",local_unit,refaxis->id );
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    if (ut_are_convertible(cmor_units,user_units)==0 ) {
+      snprintf(msg,CMOR_MAX_STRING,"axis %i (%s): cmor and user units are incompatible: %s and %s",axis_id,cmor_axes[axis_id].id,refaxis->units,units);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING,"In udunits getting converter" );
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    cv_convert_doubles(ut_cmor_converter,values,length,values);
+    /*    cv_convert_doubles(ut_cmor_converter,&cmor_axes[cmor_naxes].values[0],length,&cmor_axes[cmor_naxes].values[0]); */
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING,"In udunits converting values" );
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    cv_free(ut_cmor_converter);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    
+    ut_free(cmor_units);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    ut_free(user_units);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+
+
+  /* test for requested */
+  /* ok is there some requested values ? */
+  if (n_requested!=0) {
+    for (j=0;j<n_requested;j++) {
+      found=0;
+      /* First test is it within .001 of req_values */
+      eps = (double) fabs(1.e-3*refaxis->tolerance*refaxis->requested[j]);
+/*       printf("epsilon  is: %lf, tol: %lf\n",eps,refaxis->tolerance); */
+      if (j>0) {
+	eps2 = (double)fabs(refaxis->requested[j]-refaxis->requested[j-1])*refaxis->tolerance;
+/* 	printf("epsilon2 is: %lf\n",eps2); */
+	if (eps2<eps) eps=eps2;
+      }
+      for (i=0;i<length;i++) {
+	/* 	  printf("value %d is: %lf\n",i,values[i]); */
+	if ((double)fabs(values[i]-refaxis->requested[j])<=eps) {
+	  found = 1;
+	  break;
+	}
+      }
+      if (found==0) {
+	snprintf(msg,CMOR_MAX_STRING,"requested value %f for axis %s was not found",refaxis->requested[j],name);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+    }
+  }
+  
+
+  /* stored_direction*/
+  if ((length>1) && (((refaxis->stored_direction=='i') && (values[length-1]<values[0])) || ((refaxis->stored_direction=='d') && (values[0]<values[length-1])))) { /* need to flip that axis */
+    if ((isbounds==1)  && (axis->revert==1)) {
+      snprintf(msg,CMOR_MAX_STRING, "bounds of axis %s need to be flipped but axis values did not need to. This is inconsistent",name);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    axis->revert=-1;
+    for (i=0;i<length/2;i++) {
+      tmp = values[i];
+      values[i] = values[length-1-i];
+      values[length-1-i] = tmp;
+    }
+  }
+  if (isbounds==1) {
+    /* ok at that point we need to see if the bounds are stored in the correct first bound/second bounds order */
+    if (refaxis->axis!='X') {
+      if (refaxis->stored_direction=='i') { /* ok values are going incresingly */
+	for (i=0;i<length;i=i+2) { 
+	  if (values[i]>values[i+1]) { /* ok bounds are not stored first bound lower that second one */
+	    tmp = values[i];
+	    values[i] = values[i+1];
+	    values[i+1]=tmp;
+	  }
+	}
+      }
+      else {
+	for (i=0;i<length;i=i+2) { 
+	  if (values[i]<values[i+1]) { /* ok bounds are not stored first bound greater that second one */
+	    tmp = values[i];
+	    values[i] = values[i+1];
+	    values[i+1]=tmp;
+	  }
+	}
+      }
+    }
+    /* need to check for requested bounds */
+    if (refaxis->n_requested_bounds!=0) {
+      /* ok let's loop thru it but basically we need to loop every over ones */
+      for (j=0;j<refaxis->n_requested_bounds;j++) {
+	found=0;
+	/* First test is it within .001 of req_values */
+	eps = (double) fabs(1.e-3*refaxis->tolerance*refaxis->requested_bounds[j]);
+	if ((j % 2) == 0) {
+	  eps2 = (double)fabs(refaxis->requested_bounds[j]-refaxis->requested_bounds[j+1])*refaxis->tolerance;
+	}
+	else {
+	  eps2 = (double)fabs(refaxis->requested_bounds[j]-refaxis->requested_bounds[j-1])*refaxis->tolerance;
+	}
+/* 	printf("j, eps 2 is:%i, %lf\n",j,eps2); */
+	if (eps2<eps) eps=eps2;
+	if ((j%2)==0) {
+	  for (i=0;i<length;i=i+2) { /* it is a req beg bounds need to test against beg ones only */
+/* 	    printf("0req: %lf, val: %lf, eps: %lf, diff: %lf\n",refaxis->requested_bounds[j],values[i],eps,fabs(values[i]-refaxis->requested_bounds[j])); */
+	    if ((double)fabs(values[i]-refaxis->requested_bounds[j])<=eps) {
+	      found = 1;
+	      break;
+	    }
+	  }
+	}
+	else {
+	  for (i=1;i<length;i=i+2) { /* it is a second bounds, need to test against second nes only */
+/* 	    printf("1req: %lf, val: %lf, eps: %lf, diff: %lf\n",refaxis->requested_bounds[j],values[i],eps,fabs(values[i]-refaxis->requested_bounds[j])); */
+	    if ((double)fabs(values[i]-refaxis->requested_bounds[j])<=eps) {
+	      found = 1;
+	      break;
+	    }
+	  }
+	}
+	if (found==0) {
+	  snprintf(msg,CMOR_MAX_STRING,"requested value %f for axis %s was not found",refaxis->requested_bounds[j],name);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+    }
+    
+  }
+
+  /* is there any offsetting to be done ? */
+  if ((axis->offset!=0) && (isbounds==1)) {
+    tmplon = malloc(2*axis->offset*sizeof(double));
+    for (i=0;i<2*axis->offset;i++) {
+      tmplon[i]=values[i];
+    }
+    for (i=2*axis->offset;i<length;i++) {
+      values[i-2*axis->offset]=values[i];
+    }
+    for (i=0;i<2*axis->offset;i++) {
+      values[i+length-2*axis->offset]=tmplon[i];
+    }
+    free(tmplon);
+  }
+ 
+  i = cmor_check_monotonic(&values[0],length,name,isbounds,axis_id);
+
+
+  /* now check for valid_min/max things */
+  if (isbounds==0) {
+    if (refaxis->valid_min!=1.e20) for (i=0;i<length;i++) if (values[i]<refaxis->valid_min) { 
+      if (refaxis->axis=='X') {
+	treatlon = 1;
+      }
+      else {
+	snprintf(msg,CMOR_MAX_STRING,"axis %s, detected value at: %f when valid_min is %f\n",name,values[i],refaxis->valid_min); 
+	cmor_handle_error(msg,CMOR_NORMAL);
+	cmor_pop_traceback();
+	return 1;
+      }
+    }
+    if (treatlon==1) {
+      for (i=0;i<length;i++) { /* ok lets add 360. until it's all good */
+	while (values[i]<refaxis->valid_min) values[i]+=360.;
+      }
+      /* ok now need to determine the offset */
+      for (i=0;i<length-1;i++) {
+	if (values[i]>values[i+1]) {
+	  axis->offset = i+1; 
+	  break;
+	}
+      }
+    }
+    treatlon=0;
+    if (refaxis->valid_max!=1.e20) for (i=0;i<length;i++) if (values[i]>refaxis->valid_max) {
+      if (refaxis->axis=='X') {
+    	treatlon = 1;
+      }
+      else {
+    	snprintf(msg,CMOR_MAX_STRING,"axis %s, detected value at: %f when valid_max is %f\n",name,values[i],refaxis->valid_max);
+    	cmor_handle_error(msg,CMOR_NORMAL);
+    	cmor_pop_traceback();
+    	return 1;
+      }
+    }
+    if (treatlon==1) {
+      for (i=0;i<length;i++) { /* ok lets add 360. until it's all good */
+    	while (values[i]>refaxis->valid_max) values[i]-=360.;
+      }
+      /* ok now need to determine the offset */
+      for (i=0;i<length-1;i++) {
+    	if (values[i]>values[i+1]) {
+    	  axis->offset = i+1;
+    	  break;
+    	}
+      }
+    }
+    /* ok now need to move the offset thing */
+    if (axis->offset!=0) {
+      if (isbounds==0) {
+/* 	printf("ok unoffseted values are (axes): (offset is: %i) \n",axis->offset); */
+/* 	for (i=0;i<length;i++) printf("%i : %f\n",i,values[i]); */
+	tmplon = malloc(axis->offset*sizeof(double));
+	for (i=0;i<axis->offset;i++) {
+	  tmplon[i]=values[i];
+	}
+	for (i=axis->offset;i<length;i++) {
+	  values[i-axis->offset]=values[i];
+	}
+	for (i=0;i<axis->offset;i++) {
+	  values[i+length-axis->offset]=tmplon[i];
+	}
+	free(tmplon);
+/* 	printf("ok offseted values are (axes): \n"); */
+/* 	for (i=0;i<length;i++) printf("%i : %f\n",i,values[i]); */
+      }
+      else {
+	tmplon = malloc(2*axis->offset*sizeof(double));
+	for (i=0;i<2*axis->offset;i++) {
+	  tmplon[i]=values[i];
+	}
+	for (i=2*axis->offset;i<length;i++) {
+	  values[i-2*axis->offset]=values[i];
+	}
+	for (i=0;i<2*axis->offset;i++) {
+	  values[i+length-2*axis->offset]=tmplon[i];
+	}
+	free(tmplon);
+      }
+    }
+    i = cmor_check_monotonic(&values[0],length,name,isbounds,axis_id);
+
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_check_interval(int axis_id, char *interval, double *values, int nvalues, int isbounds) 
+{
+  char ctmp[CMOR_MAX_STRING];
+  char ctmp2[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  int i,j,n,nval;
+  double interv,diff,tmp;
+  extern ut_system *ut_read;
+  ut_unit *user_units=NULL, *cmor_units=NULL;
+  cv_converter *ut_cmor_converter=NULL;
+  double *tmp_values=NULL;
+  cmor_axis_def_t *refaxis;
+  cmor_axis_t *axis;
+  cdCalenType icali;
+  cdCompTime comptime;
+
+  cmor_add_traceback("cmor_check_interval"); 
+  axis = &cmor_axes[axis_id];
+  refaxis = &cmor_tables[axis->ref_table_id].axes[axis->ref_axis_id];
+
+  if (isbounds==0) {
+    nval = nvalues;
+    tmp_values=values;
+  }
+  else {
+    nval = nvalues/2+1;
+    tmp_values = malloc(sizeof(double)*nval);
+    if (tmp_values==NULL) {
+      snprintf(ctmp,CMOR_MAX_STRING,"Error allocating memory for %i values in check_interval (%s)",nval,interval);
+      cmor_handle_error(ctmp,CMOR_CRITICAL);
+    }
+    for (i=0;i<nval-1;i++) tmp_values[i] = values[i*2];
+    tmp_values[nval-1] = values[nvalues-1];
+  }
+  /* first of all need to figure out the numeric and unit part of the interval */
+  cmor_trim_string(interval,ctmp);
+  n = strlen(ctmp);
+  for (i=0;i<n;i++) {
+    if (ctmp[i]==' ') {
+      ctmp2[i]='\0';
+      break;
+    }
+    ctmp2[i]=ctmp[i];
+  }
+  interv = atof(ctmp2);
+  for(j=0;j<n-i;j++) {
+    ctmp2[j]=ctmp[j+i+1];
+  }
+  ctmp2[j]='\0';
+  /* ok at this point we need to convert this in some base units: seconds */
+  sprintf(msg,"seconds");
+  ut_trim(msg,UT_ASCII);
+  cmor_units = ut_parse(ut_read, msg,UT_ASCII);
+  user_units = ut_parse(ut_read, ctmp2, UT_ASCII);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits parsing user units: %s",ctmp2);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (ut_are_convertible(cmor_units,user_units)==0 ) {
+    snprintf(ctmp,CMOR_MAX_STRING,"axis interval units (%s) are incompatible with seconds",ctmp2);
+    cmor_handle_error(ctmp,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits getting converter");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  tmp = cv_convert_double(ut_cmor_converter,interv);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits converting");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  interv = tmp;
+  cv_free(ut_cmor_converter);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  ut_free(user_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  
+  /* at this point we need to figure out the axis units interval */
+  strcpy(ctmp,refaxis->units);
+  n = strlen(ctmp);
+  for (i=0;i<n;i++) {
+    if (ctmp[i]==' ') {
+      ctmp2[i]='\0';
+      break;
+    }
+    ctmp2[i]=ctmp[i];
+  }
+  user_units = ut_parse(ut_read, ctmp2, UT_ASCII);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"In udunuits parsing user units: %s",ctmp2);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (ut_are_convertible(cmor_units,user_units)==0 ) {
+    snprintf(ctmp,CMOR_MAX_STRING,"axis interval units (%s) are incompatible with seconds",ctmp2);
+    cmor_handle_error(ctmp,CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error getting converter from %s to %s",ctmp2,msg);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  tmp=0.;
+  for (i=0;i<nval-1;i++) {
+    diff = tmp_values[i+1]-tmp_values[i]; /* still in user units */
+    /* now converts to seconds */
+    tmp = cv_convert_double(ut_cmor_converter,diff);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"In udunuits converting");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    diff = tmp;
+    tmp = (double)fabs(diff-interv);
+    tmp = tmp/interv;
+    if (tmp>.2) { /* more than 20% diff issues an error */
+      snprintf(ctmp,CMOR_MAX_STRING,"approximate time axis interval is defined as %f seconds (%s), for value %i we got a difference of %f, which is %f %% , seems too big, check your values", interv, interval, i+1, diff, tmp*100.);
+      cmor_handle_error(ctmp,CMOR_CRITICAL);
+    }
+    else if (tmp>.1) { /* more than 10% diff issues a warning */
+      snprintf(ctmp,CMOR_MAX_STRING,"approximate time axis interval is defined as %f seconds (%s), for value %i we got a difference of %f, which is %f %% , seems too big, check your values", interv, interval, i+1, diff, tmp*100.);
+      cmor_handle_error(ctmp,CMOR_WARNING);
+    }
+  }
+
+  /* ok here we test for bounds being at begining and end of the month */
+  if ((isbounds==1) && (fabs(interv-2592000.)/2592000. < .1)) {
+    cmor_get_cur_dataset_attribute("calendar",ctmp);
+    if (cmor_calendar_c2i(ctmp,&icali)!=0) {
+      snprintf(ctmp,CMOR_MAX_STRING,"Cannot convert times for calendar: %s",ctmp);
+      cmor_handle_error(ctmp,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    for (i=0;i<nvalues;i++) {
+      cdRel2Comp(icali,axis->iunits,values[i],&comptime);
+      if (comptime.day!=1) {
+	snprintf(ctmp,CMOR_MAX_STRING,"Bounds value %ld-%d-%d is not beg or end of month and you seem to be writing monthly data, please check",comptime.year,comptime.month,comptime.day);
+	cmor_handle_error(ctmp,CMOR_WARNING);
+      }
+    }
+  }
+  cv_free(ut_cmor_converter);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  
+  ut_free(cmor_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  ut_free(user_units);
+  if (ut_get_status() != UT_SUCCESS) {
+    snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (isbounds == 1) free(tmp_values);
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_axis(int *axis_id, char *name,char *units, int length,void *coord_vals, char type, void *cell_bounds,int cell_bounds_ndim,char *interval) 
+{
+  extern int cmor_naxes;
+  extern int CMOR_TABLE;
+
+  int i,iref,j,ierr,k,l;
+  cmor_axis_def_t refaxis;
+  char msg[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  
+  cmor_add_traceback("cmor_axis");
+  cmor_is_setup();
+
+  if (CMOR_TABLE==-1) {
+    cmor_handle_error("You did not define a table yet!",CMOR_CRITICAL);
+  }
+
+  if (cmor_naxes==CMOR_MAX_AXES-1) { 
+    cmor_handle_error("Too many axes defined",CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+
+  /* printf("cell bnds ndims: %i\n",cell_bounds_ndim); */
+  /* if (cell_bounds_ndim==1) { */
+  /*   for (i=0;i<length;i++) { */
+  /*     printf("%lf < %lf < %lf\n",(double)((double *)cell_bounds)[i],(double)((double *)coord_vals)[i],(double)((double *)cell_bounds)[i+1]); */
+  /*   } */
+  /* } */
+   /* for (i=0;i<length;i++) {printf("ok in cmor_axsi we have: %i, %lf, %lf, %lf\n",i,(double)((double *)coord_vals)[i],(double)((double *)cell_bounds)[2*i],(double)((double *)cell_bounds)[2*i+1]);} */
+
+  cmor_naxes+=1;
+  strncpytrim(cmor_axes[cmor_naxes].id,name,CMOR_MAX_STRING);
+  /* ok now look which axis is corresponding in table if not found then error */
+  iref=-1;
+  cmor_trim_string(name,msg);
+  for (i=0;i<=cmor_tables[CMOR_TABLE].naxes;i++) if (strcmp(cmor_tables[CMOR_TABLE].axes[i].id,msg)==0) { iref=i;break;}
+  if (iref==-1) {
+    snprintf(ctmp,CMOR_MAX_STRING,"Could not find a matching axis for name: '%s'\n",msg);
+    cmor_handle_error(ctmp,CMOR_CRITICAL);
+  }
+  /*printf("ok your axis is actually axis %i in table %i\n",iref,CMOR_TABLE);*/
+  refaxis=cmor_tables[CMOR_TABLE].axes[iref];
+  cmor_axes[cmor_naxes].ref_table_id=CMOR_TABLE;
+  cmor_axes[cmor_naxes].ref_axis_id=iref;
+
+  cmor_axes[cmor_naxes].length=length;
+  cmor_axes[cmor_naxes].type=type;
+  cmor_axes[cmor_naxes].store_in_netcdf=1;
+
+  /* attributes settings */
+  if (refaxis.axis=='T') {
+    cmor_get_cur_dataset_attribute("calendar",ctmp);
+    cmor_set_axis_attribute(cmor_naxes,"calendar",'c',ctmp);
+    cmor_convert_time_units(units,refaxis.units,&ctmp[0]);
+    strncpytrim(cmor_axes[cmor_naxes].iunits,units,CMOR_MAX_STRING);
+  }
+  else strcpy(ctmp,refaxis.units);
+  ierr = cmor_set_axis_attribute(cmor_naxes,"units",'c',ctmp);
+  ctmp[0]=refaxis.axis; 
+  ctmp[1]='\0';
+  cmor_axes[cmor_naxes].axis=refaxis.axis;
+/*   printf("axis %s ref axis convert: %s\n",cmor_axes[cmor_naxes].id,refaxis.convert_to); */
+  if (refaxis.axis!='\0') ierr = cmor_set_axis_attribute(cmor_naxes,"axis",'c',ctmp);
+  if (refaxis.positive!='\0') {
+    if (refaxis.positive=='u') cmor_set_axis_attribute(cmor_naxes,"positive",'c',"up");
+    else if (refaxis.positive=='d') cmor_set_axis_attribute(cmor_naxes,"positive",'c',"down");
+  }
+  if (refaxis.long_name[0]!='\0') ierr = cmor_set_axis_attribute(cmor_naxes,"long_name",'c',refaxis.long_name);
+  if (refaxis.standard_name[0]!='\0') ierr = cmor_set_axis_attribute(cmor_naxes,"standard_name",'c',refaxis.standard_name);
+  if (refaxis.formula[0]!='\0') ierr = cmor_set_axis_attribute(cmor_naxes,"formula",'c',refaxis.formula);
+  if (refaxis.z_factors[0]!='\0') ierr = cmor_set_axis_attribute(cmor_naxes,"z_factors",'c',refaxis.z_factors);
+  if ((refaxis.z_bounds_factors[0]!='\0') && (cell_bounds!=NULL)) ierr = cmor_set_axis_attribute(cmor_naxes,"z_bounds_factors",'c',refaxis.z_bounds_factors);
+
+/*   printf("comparing %s\n",cmor_axes[cmor_naxes].id); */
+  if (strcmp(cmor_axes[cmor_naxes].id,"standard_sigma")==0) cmor_axes[cmor_naxes].hybrid_in=3;
+  if (strcmp(cmor_axes[cmor_naxes].id,"standard_hybrid_sigma")==0) cmor_axes[cmor_naxes].hybrid_in=1;
+  if (strcmp(cmor_axes[cmor_naxes].id,"alternate_hybrid_sigma")==0) cmor_axes[cmor_naxes].hybrid_in=2;
+/*   printf("we got hybrid in setto : %i\n",cmor_axes[cmor_naxes].hybrid_in); */
+  if (refaxis.convert_to[0]!='\0') {
+    if (strcmp(refaxis.convert_to,name)!=0) {
+      if (strcmp(refaxis.convert_to,"standard_hybrid_sigma")==0) {
+	/* remembers what the original type was */
+	i = cmor_axes[cmor_naxes].hybrid_in;
+	if ((strcmp(name,"standard_hybrid_sigma")!=0) && (strcmp(name,"alternate_hybrid_sigma")!=0) && (strcmp(name,"standard_sigma")!=0)) {
+	  snprintf(msg,CMOR_MAX_STRING,"axis: %s converting to \"standard_hybrid_sigma\" from unknown type: %s",cmor_axes[cmor_naxes].id,name);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	printf("yep we are copnverting to: %s\n",refaxis.convert_to);
+	ierr = cmor_axis(axis_id,refaxis.convert_to,units,length,coord_vals,type,cell_bounds,cell_bounds_ndim,interval); 
+	cmor_axes[cmor_naxes].hybrid_in=i; 
+	cmor_axes[cmor_naxes].hybrid_out=1;
+	*axis_id = cmor_naxes;
+	cmor_pop_traceback();
+	return 0;
+      }
+      else {
+	snprintf(msg,CMOR_MAX_STRING,"axis: %s is declared to be converted to unknown type: %s",cmor_axes[cmor_naxes].id,refaxis.convert_to);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+    }
+  }
+  else {
+    cmor_axes[cmor_naxes].hybrid_out=cmor_axes[cmor_naxes].hybrid_in;
+  }
+
+  /* interval attribute */
+  if ((interval!=NULL) && (interval[0]!='\0')) {
+    ierr = cmor_set_axis_attribute(cmor_naxes,"interval",'c',interval);
+  }
+  
+  /* test whether bounds are requested or not */
+  if ((cell_bounds==NULL) && (refaxis.must_have_bounds==1)) {
+    if (refaxis.axis!='T') {
+      snprintf(msg,CMOR_MAX_STRING,"axis: %s must have bounds, you did not pass any when creating it via cmor_axis",cmor_axes[cmor_naxes].id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    else if (coord_vals!=NULL) { /* we passed time values that means we do not intend to pass them later */
+      snprintf(msg,CMOR_MAX_STRING,"axis: %s must have bounds, you did not pass any when creating it via cmor_axis",cmor_axes[cmor_naxes].id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  if (coord_vals!=NULL) { /* user passed coords need to convert this guys */
+    if (type!='c') {
+      cmor_axes[cmor_naxes].values=malloc(length*sizeof(double));
+      if ( cmor_axes[cmor_naxes].values == NULL ) {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_axis: cannot allocate memory for %i double elts for axis %s",length,cmor_axes[cmor_naxes].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      if (type=='f') for (i=0;i<length;i++) cmor_axes[cmor_naxes].values[i] = (double)((float *)coord_vals)[i];
+      else if (type=='l') for (i=0;i<length;i++) cmor_axes[cmor_naxes].values[i] = (double)((long *)coord_vals)[i];
+      else if (type=='i') for (i=0;i<length;i++) cmor_axes[cmor_naxes].values[i] = (double)((int *)coord_vals)[i];
+      else if (type=='d') for (i=0;i<length;i++) cmor_axes[cmor_naxes].values[i] = (double)((double *)coord_vals)[i];
+
+/*       for(i=0;i<length;i++) printf("ok we received: %i:%lf\n",i,cmor_axes[cmor_naxes].values[i]); */
+    }
+    else {
+      cmor_axes[cmor_naxes].cvalues=malloc(length*sizeof(char *));
+      if (cmor_axes[cmor_naxes].cvalues == NULL)  {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_axis: cannot allocate memory for %i char elts for axis %s",length,cmor_axes[cmor_naxes].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      if (cell_bounds_ndim==0) k=CMOR_MAX_STRING;
+      else k=cell_bounds_ndim;
+      for (i=0;i<length;i++) {
+	j = strlen(&((char *)coord_vals)[i*k]);
+	if (j>k) j=k;
+	cmor_axes[cmor_naxes].cvalues[i]=malloc((j+1)*sizeof(char));
+	if (cmor_axes[cmor_naxes].cvalues[i] == NULL )   {
+	  snprintf(msg,CMOR_MAX_STRING,"cmor_axis: cannot allocate memory for %i char elts for axis %s",j+1,cmor_axes[cmor_naxes].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	strncpy(cmor_axes[cmor_naxes].cvalues[i],&((char *)coord_vals)[i*k],j);
+	cmor_axes[cmor_naxes].cvalues[i][j]='\0';
+      }
+      /* we don't want to do the bounds stuff */
+      /* but we need to look at the requested thing! */
+      if (refaxis.crequested!=NULL) {
+	i=0;
+	j=strlen(&refaxis.crequested[0]);
+	for (i=0;i<j;i++) {
+	  k=0;
+	  while ((refaxis.crequested[i]!=' ') && (refaxis.crequested[i]!='\0')) {ctmp[k]=refaxis.crequested[i];i++;k++;}
+	  ctmp[k]='\0';
+	  k=-1;
+	  for (l=0;l<length;l++) {
+/* 	    printf("comparing: %s and %s\n",ctmp,cmor_axes[cmor_naxes].cvalues[l]); */
+	    if (strncmp(ctmp,cmor_axes[cmor_naxes].cvalues[l],strlen(ctmp))==0) k=l;
+	  }
+	  if (k==-1) {
+	    snprintf(msg,CMOR_MAX_STRING,"Requested region for axis '%s' is not passed: '%s'",cmor_axes[cmor_naxes].id,ctmp);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+      }
+      if (refaxis.out_name[0]!='\0') strcpy(cmor_axes[cmor_naxes].id,refaxis.out_name);
+      *axis_id=cmor_naxes;
+      cmor_pop_traceback();
+      return 0;
+    }
+
+    ierr = cmor_treat_axis_values(cmor_naxes, &cmor_axes[cmor_naxes].values[0],length,refaxis.n_requested, units, name, 0 );
+    /* puts bounds on 2d array */
+    if ((cell_bounds!=NULL) && (cell_bounds_ndim!=0)) {
+      cmor_axes[cmor_naxes].bounds=malloc(2*length*sizeof(double));
+      if (cmor_axes[cmor_naxes].bounds == NULL)   {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_axis: cannot allocate memory for %i bounds elts for axis %s",2*length,cmor_axes[cmor_naxes].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      if (cell_bounds_ndim == 2) {
+	if (type=='f') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((float *)cell_bounds)[2*i];cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((float *)cell_bounds)[2*i+1]; }
+	else if (type=='d') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((double *)cell_bounds)[2*i];cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((double *)cell_bounds)[2*i+1]; }
+	else if (type=='l') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((long *)cell_bounds)[2*i];cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((long *)cell_bounds)[2*i+1]; }
+	else if (type=='i') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((int *)cell_bounds)[2*i];cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((int *)cell_bounds)[2*i+1]; }
+	else { /* ??? charcter axis code here */ snprintf(msg,CMOR_MAX_STRING,"CMOR cannot handle axes of type %c please submit a request or change type\n",type); cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+      else if (cell_bounds_ndim == 1) {
+	if (type=='f') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((float *)cell_bounds)[i]; cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((float *)cell_bounds)[i+1]; }
+	else if (type=='d') for (i=0;i<length;i++) {cmor_axes[cmor_naxes].bounds[2*i]=(double)((double *)cell_bounds)[i]; cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((double *)cell_bounds)[i+1]; }
+	else if (type=='i') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((int *)cell_bounds)[i]; cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((int *)cell_bounds)[i+1]; }
+	else if (type=='l') for (i=0;i<length;i++) { cmor_axes[cmor_naxes].bounds[2*i]=(double)((long *)cell_bounds)[i]; cmor_axes[cmor_naxes].bounds[2*i+1]=(double)((long *)cell_bounds)[i+1]; }
+	else { /* ??? charcter axis code here */ snprintf(msg,CMOR_MAX_STRING,"CMOR cannot handle axes of type %c please submit a request or change type\n",type); cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+      /* for (i=0;i<length;i++) printf("bounds: %i -> %lf,%lf\n",i,cmor_axes[cmor_naxes].bounds[2*i],cmor_axes[cmor_naxes].bounds[2*i+1]); */
+      ierr = cmor_treat_axis_values(cmor_naxes, &cmor_axes[cmor_naxes].bounds[0],2*length,0,units, name, 1 );
+      /* At this point we are checking that the axis values are within bounds */
+      /* for (i=0;i<length;i++) printf("check bounds: %i -> %lf,%lf,%lf\n",i,cmor_axes[cmor_naxes].bounds[2*i],cmor_axes[cmor_naxes].values[i],cmor_axes[cmor_naxes].bounds[2*i+1]); */
+      ierr = cmor_check_values_inside_bounds(&cmor_axes[cmor_naxes].values[0],&cmor_axes[cmor_naxes].bounds[0], length, name);
+      if (refaxis.axis=='T') {
+	/* ok now we need to overwrite the time values with mid point */
+	for (i=0;i<length;i++) cmor_axes[cmor_naxes].values[i]=(cmor_axes[cmor_naxes].bounds[2*i]+cmor_axes[cmor_naxes].bounds[2*i+1])/2.;
+      }
+    }
+  }
+  else {
+    if ((refaxis.axis!='T') && (refaxis.index_only=='n')) {
+      	snprintf(msg,CMOR_MAX_STRING,"cmor_axis: function called for axis '%s' w/o any values",cmor_axes[cmor_naxes].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (refaxis.index_only!='n') {
+      /* it is an index no need to store values */
+      cmor_axes[cmor_naxes].store_in_netcdf=0;
+    }
+  }
+
+  if (refaxis.out_name[0]!='\0') strcpy(cmor_axes[cmor_naxes].id,refaxis.out_name);
+  *axis_id=cmor_naxes;
+
+  cmor_pop_traceback();
+  return 0;
+};
+
+void cmor_init_axis_def(cmor_axis_def_t *axis, int table_id)
+{
+  cmor_is_setup();
+  axis->table_id=table_id;
+  axis->climatology=0;
+  axis->standard_name[0]='\0';
+  axis->units[0]='\0';
+  axis->axis='\0';
+  axis->positive='\0';
+  axis->long_name[0]='\0';
+  axis->out_name[0]='\0';
+  axis->type='d';
+  axis->stored_direction='i';
+  axis->valid_min=1.e20; /* means no check */
+  axis->valid_max=1.e20;
+  if (axis->requested!=NULL) free(axis->requested);
+  axis->requested=NULL;
+  if (axis->requested_bounds!=NULL) free(axis->requested_bounds);
+  axis->requested_bounds=NULL;
+  axis->tolerance=1.e-3;
+  axis->value=1.e20;
+  axis->bounds_value[0]=1.e20;
+  axis->bounds_value[1]=1.e20;
+  axis->convert_to[0]='\0';
+  axis->formula[0]='\0';
+  axis->z_factors[0]='\0';
+  axis->z_bounds_factors[0]='\0';
+  if (axis->crequested!=NULL) free(axis->requested);
+  axis->crequested=NULL;
+  axis->cname[0]='\0';
+  if (axis->requested_bounds!=NULL) free(axis->requested_bounds);
+  axis->requested=NULL;
+  axis->n_requested=0;
+  axis->n_requested_bounds=0;
+  axis->index_only='n';
+  axis->must_have_bounds=0;
+}
+
+int cmor_set_axis_def_att(cmor_axis_def_t *axis,char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] ){
+  int i,n,j;
+  char dim[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  double vals[CMOR_MAX_ELEMENTS];
+  double *tmp=NULL;
+  
+  cmor_add_traceback("cmor_set_axis_def_att");
+  cmor_is_setup();
+/*   printf("setting %s to %s on axis %s\n",att,val,axis->id); */
+  if (strcmp(att,"required")==0) {
+    strcpy(axis->required,att);
+  }
+  else if (strcmp(att,"id")==0) {
+    strcpy(axis->id,val);
+  }
+  else if (strcmp(att,"climatology")==0) {
+    if (strcmp(val,"yes")==0) axis->climatology=1;
+  }
+  else if (strcmp(att,"out_name")==0) {
+    strcpy(axis->out_name,val);
+  }
+  else if (strcmp(att,"standard_name")==0) {
+    strcpy(axis->standard_name,val);
+  }
+  else if (strcmp(att,"long_name")==0) {
+    strcpy(axis->long_name,val);
+  }
+  else if (strcmp(att,"convert_to")==0) {
+    strcpy(axis->convert_to,val);
+  }
+  else if (strcmp(att,"formula")==0) {
+    strcpy(axis->formula,val);
+  }
+  else if (strcmp(att,"z_factors")==0) {
+    strcpy(axis->z_factors,val);
+  }
+  else if (strcmp(att,"z_bounds_factors")==0) {
+    strcpy(axis->z_bounds_factors,val);
+  }
+  else if (strcmp(att,"units")==0) {
+    strncpy(axis->units,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"stored_direction")==0) {
+    if (val[0]=='i') axis->stored_direction='i';
+    else if (val[0]=='d') axis->stored_direction='d';
+  }
+  else if (strcmp(att,"positive")==0) {
+    axis->positive=val[0];
+  }
+  else if (strcmp(att,"axis")==0) {
+    axis->axis=val[0];
+  }
+  else if (strcmp(att,"index_only")==0) {
+    axis->index_only=val[0];
+  }
+  else if (strcmp(att,"must_have_bounds")==0) {
+    if (strcmp(val,"yes")==0) axis->must_have_bounds=1;
+  }
+  else if (strcmp(att,"type")==0) {
+    if (strcmp(val,"real")==0) axis->type='f';
+    else if (strcmp(val,"double")==0) axis->type='d';
+    else if (strcmp(val,"integer")==0) axis->type='i';
+    else if (strcmp(val,"long")==0) axis->type='l';
+    else if (strcmp(val,"character")==0) axis->type='c';
+  }
+  else if (strcmp(att,"valid_min")==0) {
+    axis->valid_min=atof(val);
+  }
+  else if (strcmp(att,"valid_max")==0) {
+    axis->valid_max=atof(val);
+  }
+  else if (strcmp(att,"tolerance")==0) {
+    axis->tolerance = atof(val);
+  }
+  else if (strcmp(att,"tol_on_requests")==0) {
+    axis->tolerance = atof(val);
+  }
+  else if (strcmp(att,"value")==0) {
+    axis->value = atof(val);
+  }
+  else if (strcmp(att,"bounds_values")==0) {
+    sscanf(val,"%lf %lf",&axis->bounds_value[0],&axis->bounds_value[1]);
+  }
+  else if (strcmp(att,"coords_attrib")==0) {
+    strncpytrim(axis->cname,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"bounds_requested")==0) { /* requested values for axis */
+    dim[0]='\0';
+    n=0;
+    for(i=0;i<strlen(val);i++) {
+      j=i;
+      while(((val[i]!=' ')&&(val[i]!='\0')) && (i<strlen(val))) {
+	dim[i-j]=val[i];
+	i++;
+      }
+      dim[i-j]='\0';
+      sscanf(dim,"%lf",&vals[n]);
+      while((val[i]==' ') && (val[i]!='\0')) {
+	i++;
+      }
+      i--;
+      n++;
+    }
+    if (axis->n_requested_bounds!=0) { /* ok we already had some read in need to memorize it */
+      if (axis->requested_bounds == NULL)  {
+	snprintf(msg,CMOR_MAX_STRING,"axis: looks like we already read %d requested bounds but they are not stored in the internal tables, maybe some bad cleanup",axis->n_requested_bounds);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      tmp=malloc(axis->n_requested_bounds*sizeof(double));
+      if (tmp == NULL)  {
+	snprintf(msg,CMOR_MAX_STRING,"axis: cannot allocate memory for %i requested bounds elts for axis %s",axis->n_requested,axis->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      for (i=0;i<axis->n_requested_bounds;i++) {
+	tmp[i]=axis->requested_bounds[i];
+      }
+      free(axis->requested_bounds);
+      axis->n_requested_bounds+=n;
+    }
+    else {
+      axis->n_requested_bounds=n;
+    }
+    axis->requested_bounds=malloc(axis->n_requested_bounds*sizeof(double));
+    if (axis->requested_bounds == NULL)  {
+      snprintf(msg,CMOR_MAX_STRING,"axis: cannot allocate memory for %i requested bounds elts for axis %s",axis->n_requested,axis->id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    for (i=0;i<n;i++) {  axis->requested_bounds[axis->n_requested_bounds-n+i]=vals[i];}
+    if (tmp!=NULL) { /* ok we had previously read in data need to add this */
+      for (i=0;i<axis->n_requested_bounds-n;i++) {
+	axis->requested_bounds[i]=tmp[i];
+      }
+      free(tmp); /* we don't need this any longer */
+      tmp=NULL;
+    }
+  }
+  else if (strcmp(att,"requested")==0) { /* requested values for axis */
+    if (axis->type!='c') {
+      dim[0]='\0';
+      n=0;
+      for(i=0;i<strlen(val);i++) {
+	j=i;
+	while(((val[i]!=' ')&&(val[i]!='\0')) && (i<strlen(val))) {
+	  dim[i-j]=val[i];
+	  i++;
+	}
+	dim[i-j]='\0';
+	sscanf(dim,"%lf",&vals[n]);
+	while((val[i]==' ') && (val[i]!='\0')) {
+	  i++;
+	}
+	i--;
+	n++;
+      }
+      if (axis->n_requested!=0) { /* ok we already had some read in need to memorize it */
+	if (axis->requested == NULL)  {
+	  snprintf(msg,CMOR_MAX_STRING,"axis: looks like we already read %d requested values but they are not stored in the internal tables, maybe some bad cleanup",axis->n_requested);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	tmp=malloc(axis->n_requested*sizeof(double));
+	if (tmp == NULL)  {
+	  snprintf(msg,CMOR_MAX_STRING,"axis: cannot allocate memory for %i requested elts for axis %s",axis->n_requested,axis->id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	for (i=0;i<axis->n_requested;i++) {
+	  tmp[i]=axis->requested[i];
+	}
+	free(axis->requested);
+	axis->n_requested+=n;
+      }
+      else {
+	axis->n_requested=n;
+      }
+      axis->requested=malloc(axis->n_requested*sizeof(double));
+      if (axis->requested == NULL)  {
+	snprintf(msg,CMOR_MAX_STRING,"axis: cannot allocate memory for %i requested elts for axis %s",axis->n_requested,axis->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      for (i=0;i<n;i++) { /* printf("requested: %i : %f\n",i,vals[i]); */ axis->requested[i]=vals[i];}
+      if (tmp!=NULL) { /* ok we had previously read in data need to add this */
+	for (i=0;i<axis->n_requested-n;i++) {
+	  axis->requested[i+n]=tmp[i];
+	}
+	free(tmp); /* we don't need this any longer */
+	tmp=NULL;
+      }
+    }
+    else {
+      axis->n_requested=1;
+      axis->crequested=malloc((strlen(val)+1)*sizeof(char));
+      if (axis->crequested == NULL ) {
+	snprintf(msg,CMOR_MAX_STRING,"axis: cannot allocate memory for %ld requested char elts for axis %s",(long int)strlen(val)+1,axis->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      strcpy(axis->crequested,val); 
+    }
+  }
+  else {
+    snprintf(msg,CMOR_MAX_STRING,"Unknown attribute >>>%s<<< for axis section, value: %s",att,val);
+    cmor_handle_error(msg,CMOR_WARNING);
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
diff --git a/Src/cmor_cfortran_interface.c b/Src/cmor_cfortran_interface.c
new file mode 100644
index 0000000..0182510
--- /dev/null
+++ b/Src/cmor_cfortran_interface.c
@@ -0,0 +1,481 @@
+#include <stdlib.h>
+#include <string.h>
+#include "cmor.h"
+
+int cmor_ftn_get_tlen_cff_(int *var_id) {
+  int length;
+  int ierr;
+  ierr = cmor_get_variable_time_length(var_id,&length);
+  return length;
+}
+
+int cmor_get_original_shape_cff_(int *var_id,int *shape_array) {
+  int tmp,i;
+  i=7;
+  tmp = cmor_get_original_shape(var_id,shape_array,&i,1);
+  /* reverse it for fortran order */
+  for (i=0;i<3;i++) {
+    tmp = shape_array[i];
+    shape_array[i]=shape_array[6-i];
+    shape_array[6-i]=tmp;
+  }
+  /* now need to put the -1 back at the end */
+  tmp=0;
+  for (i=0;i<7;i++) if (shape_array[i]==-1) tmp+=1;
+  for (i=0;i<7-tmp;i++) shape_array[i]=shape_array[i+tmp];
+  for (i=0;i<tmp;i++) shape_array[i+7-tmp]=-1;
+  return 0;
+}
+
+void cmor_create_output_path_cff_(int *var_id, char *path, int *slen) {
+  int isfixed;
+  isfixed = cmor_create_output_path(*var_id,path);
+  *slen = strlen(path);
+}
+
+int cmor_set_cur_dset_attribute_cff_(char *name, char *value) {
+  return cmor_set_cur_dataset_attribute(name, value, 1);
+}
+
+int cmor_get_cur_dset_attribute_cff_(char *name, char *value) {
+  return cmor_get_cur_dataset_attribute(name, value) ;
+}
+
+int cmor_has_cur_dset_attribute_cff_(char *name) {
+  return  cmor_has_cur_dataset_attribute(name);
+}
+
+int cmor_close_cff_(void) {
+  return cmor_close();
+}
+
+int cmor_close_var_nofnm_cff_(int *var_id) {
+  return cmor_close_variable(*var_id,NULL,NULL);
+}
+
+int cmor_close_var_fnm_cff_(int *var_id, char *fnm) {
+  return cmor_close_variable(*var_id,fnm,NULL);
+}
+
+int cmor_close_var_nofnm_preserve_cff_(int *var_id, int *preserve) {
+  return cmor_close_variable(*var_id,NULL,preserve);
+}
+
+int cmor_close_var_fnm_preserve_cff_(int *var_id, char *fnm, int *preserve) {
+  return cmor_close_variable(*var_id,fnm,preserve);
+}
+
+int cmor_set_grd_map_cff_(int *gid, char *name, int *nparam, char **attributes_names, int *lparam, double *values, char **units, int *lnunits){
+  return cmor_set_grid_mapping(*gid, name, *nparam, attributes_names, *lparam, values, units, *lnunits);
+}
+
+/* int cmor_grid_cff_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,blat,blon,area); */
+/* } */
+/* int cmor_grid_cff_noarea_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,blat,blon); */
+/* } */
+/* int cmor_grid_cff_noblon_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,blat,NULL,area); */
+/* } */
+/* int cmor_grid_cff_noblat_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,NULL,blon,area); */
+/* } */
+/* int cmor_grid_cff_nobnds_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,NULL,NULL,area); */
+/* } */
+/* int cmor_grid_cff_noblaar_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,NULL,blon); */
+/* } */
+/* int cmor_grid_cff_nobloar_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,blat,NULL); */
+/* } */
+/* int cmor_grid_cff_nothg_long_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'l',lat,lon,*nvertices,NULL,NULL,NULL); */
+/* } */
+
+/* int cmor_grid_cff_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,blat,blon,area); */
+/* } */
+int cmor_grid_cff_noarea_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon){
+  return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,blat,blon);
+}
+
+/* int cmor_grid_cff_noblon_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,blat,NULL,area); */
+/* } */
+/* int cmor_grid_cff_noblat_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,NULL,blon,area); */
+/* } */
+/* int cmor_grid_cff_nobnds_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,NULL,NULL,area); */
+/* } */
+int cmor_grid_cff_noblaar_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon){
+  return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,NULL,blon);
+}
+int cmor_grid_cff_nobloar_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat){
+  return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,blat,NULL);
+}
+int cmor_grid_cff_nothg_double_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices){
+  return cmor_grid(grid_id,*ndims,axes_ids,'d',lat,lon,*nvertices,NULL,NULL);
+}
+
+/* int cmor_grid_cff_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,blat,blon,area); */
+/* } */
+int cmor_grid_cff_noarea_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon){
+  return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,blat,blon);
+}
+/* int cmor_grid_cff_noblon_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,blat,NULL,area); */
+/* } */
+/* int cmor_grid_cff_noblat_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,NULL,blon,area); */
+/* } */
+/* int cmor_grid_cff_nobnds_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,NULL,NULL,area); */
+/* } */
+int cmor_grid_cff_noblaar_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon){
+  return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,NULL,blon);
+}
+int cmor_grid_cff_nobloar_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat){
+  return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,blat,NULL);
+}
+int cmor_grid_cff_nothg_real_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices){
+  return cmor_grid(grid_id,*ndims,axes_ids,'f',lat,lon,*nvertices,NULL,NULL);
+}
+int cmor_grid_cff_nocoords_(int *grid_id, int *ndims, int *axes_ids, int *nvert) {
+  return cmor_grid(grid_id,*ndims,axes_ids,'f',NULL,NULL,*nvert,NULL,NULL);
+}
+
+/* int cmor_grid_cff_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,blat,blon,area); */
+/* } */
+int cmor_grid_cff_noarea_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *blon){
+  return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,blat,blon);
+}
+/* int cmor_grid_cff_noblon_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,blat,NULL,area); */
+/* } */
+/* int cmor_grid_cff_noblat_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon,void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,NULL,blon,area); */
+/* } */
+/* int cmor_grid_cff_nobnds_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *area){ */
+/*   return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,NULL,NULL,area); */
+/* } */
+
+int cmor_grid_cff_noblaar_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blon){
+  return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,NULL,blon);
+}
+int cmor_grid_cff_nobloar_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices, void *blat){
+  return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,blat,NULL);
+}
+int cmor_grid_cff_nothg_int_(int *grid_id, int *ndims, int *axes_ids, void *lat, void *lon, int *nvertices){
+  return cmor_grid(grid_id,*ndims,axes_ids,'i',lat,lon,*nvertices,NULL,NULL);
+}
+
+int cmor_grid_cff_tvc_f_(int *coord_grid_id, int *grid_id, char *name, char *units, void *missing) {
+  return cmor_time_varying_grid_coordinate(coord_grid_id, *grid_id, name, units, 'f', missing, NULL);
+}
+int cmor_grid_cff_tvc_d_(int *coord_grid_id, int *grid_id, char *name, char *units, void *missing) {
+  return cmor_time_varying_grid_coordinate(coord_grid_id, *grid_id, name, units, 'd', missing, NULL);
+}
+int cmor_grid_cff_tvc_i_(int *coord_grid_id, int *grid_id, char *name, char *units, void *missing) {
+  return cmor_time_varying_grid_coordinate(coord_grid_id, *grid_id, name, units, 'i', missing, NULL);
+}
+int cmor_grid_cff_tvc_no_(int *coord_grid_id, int *grid_id, char *name, char *units) {
+  return cmor_time_varying_grid_coordinate(coord_grid_id, *grid_id, name, units, 'f', NULL, NULL);
+}
+
+
+
+int cmor_load_table_cff_(char table[CMOR_MAX_STRING], int *table_id) {
+  return cmor_load_table(table,table_id);
+}
+
+void cmor_set_table_cff_(int *table) {
+  int i;
+  i = cmor_set_table(*table);
+}
+
+void cmor_handle_error_cff_(char error_msg[CMOR_MAX_STRING],int *level) {
+  cmor_handle_error(error_msg,*level);
+}
+
+
+int cmor_setup_cff_nolog_(char *path, int *netcdf, int *verbosity, int *mode, int *crsub)
+{ 
+  return  cmor_setup(path,netcdf,verbosity,mode,NULL,crsub);
+}
+int cmor_setup_cff_(char *path, int *netcdf, int *verbosity, int *mode, char *logfile, int *crsub)
+{ 
+  return  cmor_setup(path,netcdf,verbosity,mode,logfile,crsub);
+}
+
+int cmor_dataset_cff_(char *outpath, 
+		      char *experiment_id,
+		      char *institution, 
+		      char *source,   
+		      char *calendar, 
+		      int *realization, 
+		      char *contact, 
+		      char *history, 
+		      char *comment, 
+		      char *references,	 
+		      int *leap_year, 
+		      int *leap_month, 
+		      int *month_lengths,
+		      char *model_name,
+		      char *forcing,
+		      int *initialization_method,
+		      int *physics_version,
+		      char *institute_id,
+		      char *parent_exp_id,
+		      double *branch_time)
+{
+  return cmor_dataset(outpath,experiment_id,institution,source,calendar,*realization,contact,history,comment,references,*leap_year,*leap_month,month_lengths,model_name,forcing,*initialization_method,*physics_version,institute_id,parent_exp_id,branch_time);
+}
+int cmor_dataset_cff_null_(char *outpath, 
+			   char *experiment_id,
+			   char *institution, 
+			   char *source,   
+			   char *calendar, 
+			   int  *realization, 
+			   char *contact, 
+			   char *history, 
+			   char *comment, 
+			   char *references,	 
+			   int  *leap_year, 
+			   int  *leap_month,
+			   char *model_name,
+			   char *forcing,
+			   int  *initialization_method,
+			   int  *physics_version,
+			   char *institute_id,
+			   char *parent_exp_id,
+			   double *branch_time)
+{
+  return cmor_dataset(outpath,experiment_id,institution,source,calendar,*realization,contact,history,comment,references,*leap_year,*leap_month,NULL,model_name,forcing,*initialization_method,*physics_version,institute_id,parent_exp_id,branch_time);
+}
+int cmor_dataset_cff_nobrch_(char *outpath, 
+			     char *experiment_id,
+			     char *institution, 
+			     char *source,   
+			     char *calendar, 
+			     int *realization, 
+			     char *contact, 
+			     char *history, 
+			     char *comment, 
+			     char *references,	 
+			     int *leap_year, 
+			     int *leap_month, 
+			     int *month_lengths,
+			     char *model_name,
+			     char *forcing,
+			     int *initialization_method,
+			     int *physics_version,
+			     char *institute_id,
+			     char *parent_exp_id)
+{
+  return cmor_dataset(outpath,experiment_id,institution,source,calendar,*realization,contact,history,comment,references,*leap_year,*leap_month,month_lengths,model_name,forcing,*initialization_method,*physics_version,institute_id,parent_exp_id,NULL);
+}
+int cmor_dataset_cff_null_nobrch_(char *outpath, 
+				  char *experiment_id,
+				  char *institution, 
+				  char *source,   
+				  char *calendar, 
+				  int  *realization, 
+				  char *contact, 
+				  char *history, 
+				  char *comment, 
+				  char *references,	 
+				  int  *leap_year, 
+				  int  *leap_month,
+				  char *model_name,
+				  char *forcing,
+				  int  *initialization_method,
+				  int  *physics_version,
+				  char *institute_id,
+				  char *parent_exp_id)
+{
+  return cmor_dataset(outpath,experiment_id,institution,source,calendar,*realization,contact,history,comment,references,*leap_year,*leap_month,NULL,model_name,forcing,*initialization_method,*physics_version,institute_id,parent_exp_id,NULL);
+}
+
+int cmor_axis_cff_double_(int *axis_id, char *name,char *units, int *length,void *coord_vals, void *cell_bounds,int *cell_bounds_ndim,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'d', cell_bounds, *cell_bounds_ndim, interval);
+}
+int cmor_axis_cff_real_(int *axis_id, char *name,char *units, int *length,void *coord_vals, void *cell_bounds,int *cell_bounds_ndim,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'f', cell_bounds, *cell_bounds_ndim, interval);
+}
+int cmor_axis_cff_int_(int *axis_id, char *name,char *units, int *length,void *coord_vals, void *cell_bounds,int *cell_bounds_ndim,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'i', cell_bounds, *cell_bounds_ndim, interval);
+}
+int cmor_axis_cff_long_(int *axis_id, char *name,char *units, int *length,void *coord_vals, void *cell_bounds,int *cell_bounds_ndim,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'l', cell_bounds, *cell_bounds_ndim, interval);
+}
+int cmor_axis_cff_nobnds_double_(int *axis_id, char *name,char *units, int *length,void *coord_vals,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'d', NULL, 0, interval);
+}
+int cmor_axis_cff_nobnds_real_(int *axis_id, char *name,char *units, int *length,void *coord_vals,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'f', NULL, 0, interval);
+}
+int cmor_axis_cff_nobnds_int_(int *axis_id, char *name,char *units, int *length,void *coord_vals,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'i', NULL, 0, interval);
+}
+int cmor_axis_cff_nobnds_long_(int *axis_id, char *name,char *units, int *length,void *coord_vals,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'l', NULL, 0, interval);
+}
+int cmor_axis_cff_nobnds_char_(int *axis_id, char *name,char *units, int *length,void *coord_vals, int *cell_bounds_ndim,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,coord_vals,'c', NULL, *cell_bounds_ndim, interval);
+}
+int cmor_axis_cff_nocoords_(int *axis_id, char *name,char *units, int *length,char *interval) {
+  return cmor_axis(axis_id,name,units,*length,NULL,'d', NULL, 0, interval);
+}
+
+int cmor_zfactor_cff_double_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values, void *bounds) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'd', values, bounds);
+}
+int cmor_zfactor_cff_double_nobnds_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'd', values, NULL);
+}
+int cmor_zfactor_cff_int_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values, void *bounds) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'i', values, bounds);
+}
+int cmor_zfactor_cff_int_nobnds_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'i', values, NULL);
+}
+int cmor_zfactor_cff_long_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values, void *bounds) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'l', values, bounds);
+}
+int cmor_zfactor_cff_long_nobnds_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'l', values, NULL);
+}
+int cmor_zfactor_cff_real_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values, void *bounds) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'f', values, bounds);
+}
+int cmor_zfactor_cff_real_nobnds_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids, void *values) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'f', values, NULL);
+}
+int cmor_zfactor_cff_novals_(int *zvar_id,int *axis_id, char *name, char *units, int *ndims, int *axes_ids) {
+  return cmor_zfactor(zvar_id, *axis_id, name, units, *ndims, axes_ids, 'd', NULL, NULL);
+}
+
+int cmor_variable_cff_double_(int *var_id, char *name, char *units, int *ndims, int *axes_ids, double *missing, double *tolerance, char *positive, char*original_name, char *history, char *comment) {
+  return cmor_variable(var_id,name,units,*ndims,axes_ids,'d',missing,tolerance,positive,original_name,history,comment);
+}
+int cmor_variable_cff_real_(int *var_id, char *name, char *units, int *ndims, int *axes_ids, float *missing, double *tolerance, char *positive, char*original_name, char *history, char *comment) {
+  return cmor_variable(var_id,name,units,*ndims,axes_ids,'f',missing,tolerance,positive,original_name,history,comment);
+}
+int cmor_variable_cff_int_(int *var_id, char *name, char *units, int *ndims, int *axes_ids, int *missing, double *tolerance, char *positive, char*original_name, char *history, char *comment) {
+  return cmor_variable(var_id,name,units,*ndims,axes_ids,'i',missing,tolerance,positive,original_name,history,comment);
+}
+int cmor_variable_cff_long_(int *var_id, char *name, char *units, int *ndims, int *axes_ids, long *missing, double *tolerance, char *positive, char*original_name, char *history, char *comment) {
+  return cmor_variable(var_id,name,units,*ndims,axes_ids,'l',missing,tolerance,positive,original_name,history,comment);
+}
+int cmor_variable_cff_nomiss_(int *var_id, char *name, char *units, int *ndims, int *axes_ids, double *tolerance, char *positive, char*original_name, char *history, char *comment) {
+  return cmor_variable(var_id,name,units,*ndims,axes_ids,'f',NULL,tolerance,positive,original_name,history,comment);
+}
+
+int cmor_write_cff_double_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, double *time_bounds, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'d',suffix,*ntimes_passed,time_vals,time_bounds,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'d',suffix,*ntimes_passed,time_vals,time_bounds,refvar);
+  }
+}
+int cmor_write_cff_double_nobnds_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'d',suffix,*ntimes_passed,time_vals,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'d',suffix,*ntimes_passed,time_vals,NULL,refvar);
+  }
+}
+int cmor_write_cff_double_notime_(int *var_id,void *data, char *suffix, int *ntimes_passed, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'d',suffix,*ntimes_passed,NULL,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'d',suffix,*ntimes_passed,NULL,NULL,refvar);
+  }
+}
+
+int cmor_write_cff_real_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, double *time_bounds, int *refvar) {
+  /*   int i; */
+  /*   printf("in interface\n"); */
+  /*   for(i=0;i<12;i++) printf("ok in here we got: %i, %i, %f\n",*var_id,*refvar,(float)((float *)data)[i]); */
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'f',suffix,*ntimes_passed,time_vals,time_bounds,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'f',suffix,*ntimes_passed,time_vals,time_bounds,refvar);
+  }
+}
+int cmor_write_cff_real_nobnds_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'f',suffix,*ntimes_passed,time_vals,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'f',suffix,*ntimes_passed,time_vals,NULL,refvar);
+  }
+}
+int cmor_write_cff_real_notime_(int *var_id,void *data, char *suffix, int *ntimes_passed, int *refvar) {
+  /*   int i; */
+  /*   for(i=0;i<12;i++) printf("ok in here we got: %i, %i, %f\n",*var_id,*refvar,(float)((float *)data)[i]); */
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'f',suffix,*ntimes_passed,NULL,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'f',suffix,*ntimes_passed,NULL,NULL,refvar);
+  }
+}
+
+int cmor_write_cff_int_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, double *time_bounds, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'i',suffix,*ntimes_passed,time_vals,time_bounds,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'i',suffix,*ntimes_passed,time_vals,time_bounds,refvar);
+  }
+}
+int cmor_write_cff_int_nobnds_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'i',suffix,*ntimes_passed,time_vals,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'i',suffix,*ntimes_passed,time_vals,NULL,refvar);
+  }
+}
+int cmor_write_cff_int_notime_(int *var_id,void *data, char *suffix, int *ntimes_passed, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'i',suffix,*ntimes_passed,NULL,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'i',suffix,*ntimes_passed,NULL,NULL,refvar);
+  }
+}
+int cmor_write_cff_long_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, double *time_bounds, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'l',suffix,*ntimes_passed,time_vals,time_bounds,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'l',suffix,*ntimes_passed,time_vals,time_bounds,refvar);
+  }
+}
+int cmor_write_cff_long_nobnds_(int *var_id,void *data, char *suffix, int *ntimes_passed, double *time_vals, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'l',suffix,*ntimes_passed,time_vals,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'l',suffix,*ntimes_passed,time_vals,NULL,refvar);
+  }
+}
+int cmor_write_cff_long_notime_(int *var_id,void *data, char *suffix, int *ntimes_passed, int *refvar) {
+  if (*refvar<0) {
+    return cmor_write(*var_id,data,'l',suffix,*ntimes_passed,NULL,NULL,NULL);
+  }
+  else {
+    return cmor_write(*var_id,data,'l',suffix,*ntimes_passed,NULL,NULL,refvar);
+  }
+}
diff --git a/Src/cmor_fortran_interface.f90 b/Src/cmor_fortran_interface.f90
new file mode 100644
index 0000000..3cf9cf8
--- /dev/null
+++ b/Src/cmor_fortran_interface.f90
@@ -0,0 +1,7031 @@
+module cmor_users_functions
+  interface 
+     subroutine cmor_create_output_path_cff(var_id, path, slen)
+       character(*), intent(out) ::  path
+       integer var_id
+       integer , intent(out) :: slen
+     end subroutine cmor_create_output_path_cff
+  end interface
+  interface 
+     function cmor_set_cur_dset_attribute_cff(nm, value) result (ierr)
+       character(*) nm
+       character (*) value
+       integer ierr
+     end function cmor_set_cur_dset_attribute_cff
+  end interface
+  interface 
+     function cmor_get_cur_dset_attribute_cff(name, value) result (ierr)
+       character(*) name
+       character(*) value
+       integer ierr
+     end function cmor_get_cur_dset_attribute_cff
+  end interface
+  interface 
+     function cmor_has_cur_dset_attribute_cff(name) result (ierr)
+       character(*) name
+       integer ierr
+     end function cmor_has_cur_dset_attribute_cff
+  end interface
+  interface 
+     subroutine cmor_get_original_shape_cff(var_id,shape_array)
+       integer var_id,shape_array
+     end subroutine cmor_get_original_shape_cff
+  end interface
+  interface 
+     subroutine cmor_set_table_cff(table_id)
+       integer table_id
+     end subroutine cmor_set_table_cff
+  end interface
+  interface cmor_handle_error
+     subroutine cmor_handle_error_cff(error_msg, level)
+       character(*) error_msg
+       integer level
+     end subroutine cmor_handle_error_cff
+  end interface
+
+  interface
+     subroutine cmor_load_table_cff(table, table_id)
+       integer, intent(out) :: table_id
+       character(*) table
+     end subroutine cmor_load_table_cff
+  end interface
+
+  interface 
+     function cmor_setup_cff_nolog(path,ncmode,verbosity,mode,crsub) result (j)
+       integer ncmode,verbosity,mode, j, crsub
+       character(*) path
+     end function cmor_setup_cff_nolog
+  end interface
+  interface 
+     function cmor_setup_cff(path,ncmode,verbosity,mode,logfile,crsub) result (j)
+       integer ncmode,verbosity,mode, j, crsub
+       character(*) path, logfile
+     end function cmor_setup_cff
+  end interface
+
+  interface
+     function  cmor_ftn_get_tlen_cff(var_id) result(ierr)
+       integer var_id,ierr
+     end function cmor_ftn_get_tlen_cff
+  end interface
+
+  interface cmor_dataset_cff
+     function cmor_dataset_cff(outpath,experiment_id,institution,&
+          source,calendar,realization,contact,history,comment,&
+          references, leap_year,leap_month,month_lengths,model_id,&
+          forcing,initialization_method,physics_version,institute_id,&
+          parent_exp_id,branch_time) result (ierr)
+       character(*) :: outpath,experiment_id,institution,source,calendar,contact
+       character(*) :: history,comment,references,model_id,forcing,institute_id
+       character(*) :: parent_exp_id
+       integer :: realization,leap_year,leap_month,month_lengths
+       integer :: ierr,initialization_method,physics_version
+       double precision branch_time
+     end function cmor_dataset_cff
+     function cmor_dataset_cff_null(outpath,experiment_id,institution,&
+          source,calendar,realization,contact,history,comment,&
+          references, leap_year,leap_month,model_id,forcing,&
+          initialization_method,physics_version,institute_id, &
+          parent_exp_id,branch_time) result (ierr)
+       character(*) :: outpath,experiment_id,institution,source,calendar,contact
+       character(*) :: history,comment,references,model_id,forcing,institute_id
+       character(*) :: parent_exp_id
+       integer :: realization,leap_year,leap_month
+       integer :: ierr,initialization_method,physics_version
+       double precision branch_time
+     end function cmor_dataset_cff_null
+     function cmor_dataset_cff_nobrch(outpath,experiment_id,institution,&
+          source,calendar,realization,contact,history,comment,&
+          references, leap_year,leap_month,month_lengths,model_id,&
+          forcing,initialization_method,physics_version,institute_id, &
+          parent_exp_id) result (ierr)
+       character(*) :: outpath,experiment_id,institution,source,calendar,contact
+       character(*) :: history,comment,references,model_id,forcing,institute_id
+       character(*) :: parent_exp_id
+       integer :: realization,leap_year,leap_month,month_lengths
+       integer :: ierr,initialization_method,physics_version
+     end function cmor_dataset_cff_nobrch
+     function cmor_dataset_cff_null_nobrch(outpath,experiment_id,institution,&
+          source,calendar,realization,contact,history,comment,&
+          references, leap_year,leap_month,model_id,forcing,&
+          initialization_method,physics_version,institute_id, &
+          parent_exp_id) result (ierr)
+       character(*) :: outpath,experiment_id,institution,source,calendar,contact
+       character(*) :: history,comment,references,model_id,forcing,institute_id
+       character(*) :: parent_exp_id
+       integer :: realization,leap_year,leap_month
+       integer :: ierr,initialization_method,physics_version
+     end function cmor_dataset_cff_null_nobrch
+  end interface
+
+  interface 
+     function cmor_axis_cff_double(axis_id,table_entry,units,length,&
+          coord_vals,cell_bounds,cell_bounds_ndim,interval) result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       double precision :: coord_vals,cell_bounds
+       integer cell_bounds_ndim, length
+       integer ierr
+     end function cmor_axis_cff_double
+  end interface
+
+  interface 
+     function cmor_axis_cff_real(axis_id,table_entry,units,length,&
+          coord_vals,cell_bounds,cell_bounds_ndim,interval) result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       real :: coord_vals,cell_bounds
+       integer cell_bounds_ndim, length
+       integer ierr
+     end function cmor_axis_cff_real
+  end interface
+  interface 
+     function cmor_axis_cff_int(axis_id,table_entry,units,length,&
+          coord_vals,cell_bounds,cell_bounds_ndim,interval) result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       integer :: coord_vals,cell_bounds
+       integer cell_bounds_ndim, length
+       integer ierr
+     end function cmor_axis_cff_int
+  end interface
+!!$  interface 
+!!$     function cmor_axis_cff_long(axis_id,table_entry,units,length,&
+!!$          coord_vals,cell_bounds,cell_bounds_ndim,interval) result(ierr)
+!!$       integer, intent(out):: axis_id
+!!$       character(*) table_entry,units,interval
+!!$       integer (kind=8):: coord_vals,cell_bounds
+!!$       integer cell_bounds_ndim, length
+!!$       integer ierr
+!!$     end function cmor_axis_cff_long
+!!$  end interface
+  interface 
+     function cmor_axis_cff_nocoords(axis_id,table_entry,units,length,&
+          interval) result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       integer length
+        character type
+        integer ierr
+    end function cmor_axis_cff_nocoords
+  end interface
+  interface 
+     function cmor_axis_cff_nobnds_double(axis_id,table_entry,units,length,&
+          coord_vals,interval)  result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       double precision :: coord_vals
+       integer length
+       integer ierr
+     end function cmor_axis_cff_nobnds_double
+  end interface
+  interface 
+     function cmor_axis_cff_nobnds_real(axis_id,table_entry,units,length,&
+          coord_vals,interval)  result(ierr)
+       integer, intent(out)::axis_id
+       character(*) table_entry,units,interval
+       real :: coord_vals
+       integer length
+       integer ierr
+     end function cmor_axis_cff_nobnds_real
+  end interface
+  interface 
+     function cmor_axis_cff_nobnds_int(axis_id,table_entry,units,length,&
+          coord_vals,interval)  result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       integer :: coord_vals
+       integer length
+       integer ierr
+     end function cmor_axis_cff_nobnds_int
+  end interface
+!!$  interface 
+!!$     function cmor_axis_cff_nobnds_long(axis_id,table_entry,units,length,&
+!!$          coord_vals,interval)  result(ierr)
+!!$       integer, intent(out):: axis_id
+!!$       character(*) table_entry,units,interval
+!!$       integer (kind=8) :: coord_vals
+!!$       integer  length
+!!$       integer ierr
+!!$     end function cmor_axis_cff_nobnds_long
+!!$  end interface
+  interface 
+     function cmor_axis_cff_nobnds_char(axis_id,table_entry,units,length,&
+          coord_vals,cell_bounds_ndim,interval)  result(ierr)
+       integer, intent(out):: axis_id
+       character(*) table_entry,units,interval
+       character(*) :: coord_vals
+       integer cell_bounds_ndim, length
+       integer ierr
+     end function cmor_axis_cff_nobnds_char
+  end interface
+
+  interface 
+     function cmor_zfactor_cff_double(zvar_id,axis_id, name, units, ndims, &
+          axes_ids, values, bounds) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+       double precision values,bounds
+     end function cmor_zfactor_cff_double
+  end interface
+  interface 
+     function cmor_zfactor_cff_double_nobnds(zvar_id,axis_id, name, units, ndims, &
+          axes_ids, values) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+       double precision values
+     end function cmor_zfactor_cff_double_nobnds
+  end interface
+  interface 
+     function cmor_zfactor_cff_real(zvar_id,axis_id, name, units, ndims, &
+          axes_ids, values, bounds) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+       real values,bounds
+     end function cmor_zfactor_cff_real
+  end interface
+  interface 
+     function cmor_zfactor_cff_real_nobnds(zvar_id,axis_id, name, units, ndims, &
+          axes_ids, values) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+       real values
+     end function cmor_zfactor_cff_real_nobnds
+  end interface
+  interface 
+     function cmor_zfactor_cff_int(zvar_id,axis_id, name, units, ndims, &
+          axes_ids, values, bounds) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+       integer values,bounds
+     end function cmor_zfactor_cff_int
+  end interface
+  interface 
+     function cmor_zfactor_cff_int_nobnds(zvar_id,axis_id, name, units, ndims, &
+          axes_ids, values) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+       integer values
+     end function cmor_zfactor_cff_int_nobnds
+  end interface
+!!$  interface 
+!!$     function cmor_zfactor_cff_long(zvar_id,axis_id, name, units, ndims, &
+!!$          axes_ids, values, bounds) result (ierr)
+!!$       integer,intent(out) :: zvar_id
+!!$       integer axis_id,ndims,ierr
+!!$       character(*) name,units
+!!$       integer axes_ids
+!!$       integer (kind=8) :: values,bounds
+!!$     end function cmor_zfactor_cff_long
+!!$  end interface
+!!$  interface 
+!!$     function cmor_zfactor_cff_long_nobnds(zvar_id,axis_id, name, units, ndims, &
+!!$          axes_ids, values) result (ierr)
+!!$       integer,intent(out) :: zvar_id
+!!$       integer axis_id,ndims,ierr
+!!$       character(*) name,units
+!!$       integer axes_ids
+!!$       integer(kind=8) :: values
+!!$     end function cmor_zfactor_cff_long_nobnds
+!!$  end interface
+  interface 
+     function cmor_zfactor_cff_novals(zvar_id,axis_id, name, units, ndims, &
+          axes_ids) result (ierr)
+       integer,intent(out) :: zvar_id
+       integer axis_id,ndims,ierr
+       character(*) name,units
+       integer axes_ids
+     end function cmor_zfactor_cff_novals
+  end interface
+
+  interface 
+     function cmor_variable_cff_double(var_id,name,units,ndims,&
+       axes_ids,missing,tol,&
+       pos,onm,hist,com) result (ierr)
+     integer , intent(out) :: var_id
+     character(*) :: name,units,pos,onm,hist,com
+     double precision tol
+     double precision missing
+     integer ierr,axes_ids,ndims
+   end function cmor_variable_cff_double
+  end interface
+  interface 
+     function cmor_variable_cff_int(var_id,name,units,ndims,&
+       axes_ids,missing,tol,&
+       pos,onm,hist,com) result (ierr)
+     integer , intent(out) :: var_id
+     character(*) :: name,units,pos,onm,hist,com
+     double precision tol
+     integer missing
+     integer ierr,axes_ids,ndims
+   end function cmor_variable_cff_int
+  end interface
+!!$  interface 
+!!$     function cmor_variable_cff_long(var_id,name,units,ndims,&
+!!$       axes_ids,missing,tol,&
+!!$       pos,onm,hist,com) result (ierr)
+!!$     integer , intent(out) :: var_id
+!!$     character(*) :: name,units,pos,onm,hist,com
+!!$     double precision tol
+!!$     integer (kind=8) missing
+!!$     integer ierr,axes_ids,ndims
+!!$   end function cmor_variable_cff_long
+!!$  end interface
+  interface 
+     function cmor_variable_cff_real(var_id,name,units,ndims,axes_ids,&
+       missing,tol,&
+       pos,onm,hist,com) result (ierr)
+     integer , intent(out) :: var_id
+     character(*) :: name,units,pos,onm,hist,com
+     double precision tol
+     real missing
+     integer ierr,axes_ids,ndims
+   end function cmor_variable_cff_real
+  end interface
+  interface 
+     function cmor_variable_cff_nomiss(var_id,name,units,&
+       ndims,axes_ids,tol,&
+       pos,onm,hist,com) result (ierr)
+     integer , intent(out) :: var_id
+     character(*) :: name,units,pos,onm,hist,com
+     double precision tol
+     integer ierr,axes_ids,ndims
+   end function cmor_variable_cff_nomiss
+  end interface
+
+  interface 
+     function cmor_write_cff_real(var_id,data,suffix,ntimes_passed, &
+          time_vals,time_bounds,refvar) result(ierr)
+       integer var_id
+       real :: data
+       character(*) suffix
+       integer ntimes_passed
+       double precision time_vals, time_bounds
+       integer refvar,ierr
+     end function cmor_write_cff_real
+  end interface
+  interface 
+     function cmor_write_cff_real_nobnds(var_id,data,suffix,ntimes_passed, &
+          time_vals,refvar) result(ierr)
+       integer var_id
+       real :: data
+       character(*) suffix
+       integer ntimes_passed
+       double precision time_vals
+       integer refvar,ierr
+     end function cmor_write_cff_real_nobnds
+  end interface
+  interface 
+     function cmor_write_cff_real_notime(var_id,data,suffix,ntimes_passed, &
+          refvar) result(ierr)
+       integer var_id
+       real :: data
+       character(*) suffix
+       integer ntimes_passed
+       integer refvar,ierr
+     end function cmor_write_cff_real_notime
+  end interface
+  interface 
+     function cmor_write_cff_double(var_id,data,suffix,ntimes_passed, &
+          time_vals,time_bounds,refvar) result(ierr)
+       integer var_id
+       double precision :: data
+       character(*) suffix
+       integer ntimes_passed
+       double precision time_vals, time_bounds
+       integer refvar,ierr
+     end function cmor_write_cff_double
+  end interface
+  interface 
+     function cmor_write_cff_double_nobnds(var_id,data,suffix,ntimes_passed, &
+          time_vals,refvar) result(ierr)
+       integer var_id
+       double precision:: data
+       character(*) suffix
+       integer ntimes_passed
+       double precision time_vals
+       integer refvar,ierr
+     end function cmor_write_cff_double_nobnds
+  end interface
+  interface 
+     function cmor_write_cff_double_notime(var_id,data,suffix,ntimes_passed, &
+          refvar) result(ierr)
+       integer var_id
+       double precision :: data
+       character(*) suffix
+       integer ntimes_passed
+       integer refvar,ierr
+     end function cmor_write_cff_double_notime
+  end interface
+  interface 
+     function cmor_write_cff_int(var_id,data,suffix,ntimes_passed, &
+          time_vals,time_bounds,refvar) result(ierr)
+       integer var_id
+       integer :: data
+       character(*) suffix
+       integer ntimes_passed
+       double precision time_vals, time_bounds
+       integer refvar,ierr
+     end function cmor_write_cff_int
+  end interface
+  interface 
+     function cmor_write_cff_int_nobnds(var_id,data,suffix,ntimes_passed, &
+          time_vals,refvar) result(ierr)
+       integer var_id
+       integer :: data
+       character(*) suffix
+       integer ntimes_passed
+       double precision time_vals
+       integer refvar,ierr
+     end function cmor_write_cff_int_nobnds
+  end interface
+  interface 
+     function cmor_write_cff_int_notime(var_id,data,suffix,ntimes_passed, &
+          refvar) result(ierr)
+       integer var_id
+       integer :: data
+       character(*) suffix
+       integer ntimes_passed
+       integer refvar,ierr
+     end function cmor_write_cff_int_notime
+  end interface
+!!$  interface 
+!!$     function cmor_write_cff_long(var_id,data,suffix,ntimes_passed, &
+!!$          time_vals,time_bounds,refvar) result(ierr)
+!!$       integer var_id
+!!$       integer(kind=8) :: data
+!!$       character(*) suffix
+!!$       integer ntimes_passed
+!!$       double precision time_vals, time_bounds
+!!$       integer refvar,ierr
+!!$     end function cmor_write_cff_long
+!!$  end interface
+!!$  interface 
+!!$     function cmor_write_cff_long_nobnds(var_id,data,suffix,ntimes_passed, &
+!!$          time_vals,refvar) result(ierr)
+!!$       integer var_id
+!!$       integer(kind=8) :: data
+!!$       character(*) suffix
+!!$       integer ntimes_passed
+!!$       double precision time_vals
+!!$       integer refvar,ierr
+!!$     end function cmor_write_cff_long_nobnds
+!!$  end interface
+!!$  interface 
+!!$     function cmor_write_cff_long_notime(var_id,data,suffix,ntimes_passed, &
+!!$          refvar) result(ierr)
+!!$       integer var_id
+!!$       integer(kind=8) :: data
+!!$       character(*) suffix
+!!$       integer ntimes_passed
+!!$       integer refvar,ierr
+!!$     end function cmor_write_cff_long_notime
+!!$  end interface
+!!$
+!!$
+!!$  interface 
+!!$     function cmor_grid_cff_long(grid_id,ndims,axes_ids,&
+!!$       lat,lon,nvertices,blat,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,area,blat,blon
+!!$     end function cmor_grid_cff_long
+!!$  end interface
+!!$  interface  
+!!$     function cmor_grid_cff_noarea_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blat,blon) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,blat,blon
+!!$     end function cmor_grid_cff_noarea_long
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblon_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blat,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,blat,area
+!!$     end function cmor_grid_cff_noblon_long
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblat_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,area,blon
+!!$     end function cmor_grid_cff_noblat_long
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_nobnds_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,area
+!!$     end function cmor_grid_cff_nobnds_long
+!!$  end interface
+!!$  interface   
+!!$     function cmor_grid_cff_noblaar_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blon) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,blon
+!!$     end function cmor_grid_cff_noblaar_long
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_nobloar_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blat) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon,blat
+!!$     end function cmor_grid_cff_nobloar_long
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_nothg_long(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER (KIND=8) :: lat,lon
+!!$     end function cmor_grid_cff_nothg_long
+!!$  end interface
+
+
+!!$  interface 
+!!$     function cmor_grid_cff_double(grid_id,ndims,axes_ids,&
+!!$       lat,lon,nvertices,blat,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       DOUBLE PRECISION :: lat,lon,area,blat,blon
+!!$     end function cmor_grid_cff_double
+!!$  end interface
+  interface  
+     function cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blat,blon) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       DOUBLE PRECISION :: lat,lon,blat,blon
+     end function cmor_grid_cff_noarea_double
+  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blat,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       DOUBLE PRECISION :: lat,lon,blat,area
+!!$     end function cmor_grid_cff_noblon_double
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       DOUBLE PRECISION :: lat,lon,area,blon
+!!$     end function cmor_grid_cff_noblat_double
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       DOUBLE PRECISION :: lat,lon,area
+!!$     end function cmor_grid_cff_nobnds_double
+!!$  end interface
+  interface   
+     function cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blon) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       DOUBLE PRECISION :: lat,lon,blon
+     end function cmor_grid_cff_noblaar_double
+  end interface
+  interface  
+     function  cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blat) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       DOUBLE PRECISION :: lat,lon,blat
+     end function cmor_grid_cff_nobloar_double
+  end interface
+  interface  
+     function  cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       DOUBLE PRECISION :: lat,lon
+     end function cmor_grid_cff_nothg_double
+  end interface
+
+
+
+!!$  interface 
+!!$     function cmor_grid_cff_int(grid_id,ndims,axes_ids,&
+!!$       lat,lon,nvertices,blat,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER :: lat,lon,area,blat,blon
+!!$     end function cmor_grid_cff_int
+!!$  end interface
+  interface  
+     function cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blat,blon) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       INTEGER :: lat,lon,blat,blon
+     end function cmor_grid_cff_noarea_int
+  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blat,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER :: lat,lon,blat,area
+!!$     end function cmor_grid_cff_noblon_int
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER :: lat,lon,area,blon
+!!$     end function cmor_grid_cff_noblat_int
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       INTEGER :: lat,lon,area
+!!$     end function cmor_grid_cff_nobnds_int
+!!$  end interface
+  interface   
+     function cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blon) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       INTEGER :: lat,lon,blon
+     end function cmor_grid_cff_noblaar_int
+  end interface
+  interface  
+     function  cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blat) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       INTEGER :: lat,lon,blat
+     end function cmor_grid_cff_nobloar_int
+  end interface
+  interface  
+     function  cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       INTEGER :: lat,lon
+     end function cmor_grid_cff_nothg_int
+  end interface
+  interface
+     function cmor_grid_cff_nocoords(grid_id,ndims,axes_ids,nvert) &
+          result (ierr)
+       integer, intent(out) :: grid_id
+       integer ierr, ndims, axes_ids, nvert
+     end function cmor_grid_cff_nocoords
+  end interface
+
+!!$  interface 
+!!$     function cmor_grid_cff_real(grid_id,ndims,axes_ids,&
+!!$       lat,lon,nvertices,blat,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       REAL :: lat,lon,area,blat,blon
+!!$     end function cmor_grid_cff_real
+!!$  end interface
+  interface  
+     function cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blat,blon) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       REAL :: lat,lon,blat,blon
+     end function cmor_grid_cff_noarea_real
+  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blat,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       REAL :: lat,lon,blat,area
+!!$     end function cmor_grid_cff_noblon_real
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,blon,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       REAL :: lat,lon,area,blon
+!!$     end function cmor_grid_cff_noblat_real
+!!$  end interface
+!!$  interface  
+!!$     function  cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids,&
+!!$          lat,lon,nvertices,area) result(ierr)
+!!$       integer, intent(out) :: grid_id
+!!$       integer ierr,nvertices,ndims
+!!$       integer axes_ids
+!!$       REAL :: lat,lon,area
+!!$     end function cmor_grid_cff_nobnds_real
+!!$  end interface
+  interface   
+     function cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blon) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       REAL :: lat,lon,blon
+     end function cmor_grid_cff_noblaar_real
+  end interface
+  interface  
+     function  cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices,blat) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       REAL :: lat,lon,blat
+     end function cmor_grid_cff_nobloar_real
+  end interface
+  interface  
+     function  cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids,&
+          lat,lon,nvertices) result(ierr)
+       integer, intent(out) :: grid_id
+       integer ierr,nvertices,ndims
+       integer axes_ids
+       REAL :: lat,lon
+     end function cmor_grid_cff_nothg_real
+  end interface
+
+
+  interface
+     function cmor_grid_cff_tvc_d(coord_grid_id,grid_id,name,units,&
+          missing) result (ierr)
+       integer,intent(out):: coord_grid_id
+       integer grid_id,ierr
+       character(*) name,units
+       double precision missing
+     end function cmor_grid_cff_tvc_d
+  end interface
+  interface
+     function cmor_grid_cff_tvc_f(coord_grid_id,grid_id,name,units,&
+          missing) result (ierr)
+       integer,intent(out):: coord_grid_id
+       integer grid_id,ierr
+       character(*) name,units
+       REAL missing
+     end function cmor_grid_cff_tvc_f
+  end interface
+  interface
+     function cmor_grid_cff_tvc_i(coord_grid_id,grid_id,name,units,&
+          missing) result (ierr)
+       integer,intent(out):: coord_grid_id
+       integer grid_id,ierr
+       character(*) name,units
+       integer missing
+     end function cmor_grid_cff_tvc_i
+  end interface
+  interface
+     function cmor_grid_cff_tvc_no(coord_grid_id,grid_id,name,units)&
+          result (ierr)
+       integer,intent(out):: coord_grid_id
+       integer grid_id,ierr
+       character(*) name,units
+     end function cmor_grid_cff_tvc_no
+  end interface
+
+  interface
+     function cmor_set_grd_map_cff(gid,nm,nparam,att_names,lparam,&
+          values,units,lunits) result(ierr)
+       integer gid, nparam,lparam,lunits
+       character(*):: att_names,units
+       character(*) :: nm
+       double precision :: values
+     end function cmor_set_grd_map_cff
+  end interface
+
+  interface 
+     function cmor_close_var_nofnm_cff(varid) result (ierr)
+       integer ierr,varid
+     end function cmor_close_var_nofnm_cff
+  end interface
+  interface 
+     function cmor_close_var_fnm_cff(varid, fnm) result (ierr)
+       integer ierr,varid
+       character(*) :: fnm
+     end function cmor_close_var_fnm_cff
+  end interface
+  interface 
+     function cmor_close_var_nofnm_preserve_cff(varid, preserve) &
+          result (ierr)
+       integer ierr,varid,preserve
+     end function cmor_close_var_nofnm_preserve_cff
+  end interface
+  interface 
+     function cmor_close_var_fnm_preserve_cff(varid, fnm, preserve) &
+          result (ierr)
+       integer ierr,varid,preserve
+       character(*) :: fnm
+     end function cmor_close_var_fnm_preserve_cff
+  end interface
+  interface 
+     function cmor_close_cff() result (ierr)
+       integer ierr
+     end function cmor_close_cff
+  end interface
+  
+  interface cmor_axis
+     module procedure cmor_axis_double_1
+     module procedure cmor_axis_double_2
+     module procedure cmor_axis_real_1
+     module procedure cmor_axis_real_2
+     module procedure cmor_axis_int_1
+     module procedure cmor_axis_int_2
+!!$     module procedure cmor_axis_long_1
+!!$     module procedure cmor_axis_long_2
+     module procedure cmor_axis_char
+  end interface
+
+  interface cmor_setup
+     module procedure cmor_setup_ints
+     module procedure cmor_setup_nc_char
+  end interface
+
+
+  integer, parameter:: CMOR_MAX_STRING = 1024
+  integer, parameter:: CMOR_DEF_ATTR_STR_LEN = 256
+  integer, parameter:: CMOR_MAX_ELEMENTS = 500
+  integer, parameter:: CMOR_MAX_AXES = CMOR_MAX_ELEMENTS*3
+  integer, parameter:: CMOR_MAX_VARIABLES = CMOR_MAX_ELEMENTS
+  integer, parameter:: CMOR_MAX_GRIDS = 10
+  integer, parameter:: CMOR_MAX_DIMENSIONS = 7
+  integer, parameter:: CMOR_MAX_ATTRIBUTES = 100
+  integer, parameter:: CMOR_MAX_ERRORS = 10
+  integer, parameter:: CMOR_MAX_TABLES = 10
+  integer, parameter:: CMOR_MAX_GRID_ATTRIBUTES = 15
+
+  integer, parameter:: CMOR_QUIET = 0
+
+  integer, parameter:: CMOR_EXIT_ON_MAJOR = 0
+  integer, parameter:: CMOR_EXIT_ON_WARNING = 2
+
+  real,    parameter:: CMOR_VERSION = 2.0
+  real,    parameter:: CMOR_CF_VERSION = 1.4
+
+  integer, parameter:: CMOR_WARNING = 20
+  integer, parameter:: CMOR_NORMAL = 21
+  integer, parameter:: CMOR_CRITICAL = 22
+
+  integer, parameter:: CMOR_N_VALID_CALS = 8
+
+  integer, parameter:: CMOR_PRESERVE_4 = 10
+  integer, parameter:: CMOR_APPEND_4 = 11
+  integer, parameter:: CMOR_REPLACE_4 = 12
+  integer, parameter:: CMOR_PRESERVE_3 = 13
+  integer, parameter:: CMOR_APPEND_3 = 14
+  integer, parameter:: CMOR_REPLACE_3 = 15
+  integer, parameter:: CMOR_PRESERVE = CMOR_PRESERVE_3
+  integer, parameter:: CMOR_APPEND = CMOR_APPEND_3
+  integer, parameter:: CMOR_REPLACE = CMOR_REPLACE_3
+
+  interface cmor_zfactor
+     module procedure cmor_zfactor_double
+     module procedure cmor_zfactor_double_0dvalues
+     module procedure cmor_zfactor_real
+     module procedure cmor_zfactor_real_0dvalues
+     module procedure cmor_zfactor_int
+     module procedure cmor_zfactor_int_0dvalues
+!!$     module procedure cmor_zfactor_long
+!!$     module procedure cmor_zfactor_long_0dvalues
+     module procedure cmor_zfactor_novals
+  end interface
+
+  interface cmor_variable
+     module procedure cmor_variable_double
+     module procedure cmor_variable_real
+     module procedure cmor_variable_int
+!!$     module procedure cmor_variable_long
+  end interface
+  interface cmor_write
+!!$     module procedure cmor_write_1d_l
+     module procedure cmor_write_1d_i
+     module procedure cmor_write_1d_r
+     module procedure cmor_write_1d_d
+     module procedure cmor_write_2d_i
+!!$     module procedure cmor_write_2d_l
+     module procedure cmor_write_2d_r
+     module procedure cmor_write_2d_d
+!!$     module procedure cmor_write_3d_l
+     module procedure cmor_write_3d_i
+     module procedure cmor_write_3d_r
+     module procedure cmor_write_3d_d
+     module procedure cmor_write_4d_i
+!!$     module procedure cmor_write_4d_l
+     module procedure cmor_write_4d_r
+     module procedure cmor_write_4d_d
+!!$     module procedure cmor_write_5d_l
+     module procedure cmor_write_5d_i
+     module procedure cmor_write_5d_r
+     module procedure cmor_write_5d_d
+     module procedure cmor_write_6d_i
+!!$     module procedure cmor_write_6d_l
+     module procedure cmor_write_6d_r
+     module procedure cmor_write_6d_d
+     module procedure cmor_write_7d_i
+!!$     module procedure cmor_write_7d_l
+     module procedure cmor_write_7d_r
+     module procedure cmor_write_7d_d
+  end interface
+
+
+  interface cmor_time_varying_grid_coordinate
+     module procedure cmor_grid_tvc_r
+     module procedure cmor_grid_tvc_d
+     module procedure cmor_grid_tvc_i
+  end interface
+
+  interface cmor_grid
+!!$     module procedure cmor_grid_1d_l
+!!$     module procedure cmor_grid_2d_l
+!!$     module procedure cmor_grid_3d_l
+!!$     module procedure cmor_grid_4d_l
+!!$     module procedure cmor_grid_5d_l
+!!$     module procedure cmor_grid_6d_l
+     module procedure cmor_grid_0d
+     module procedure cmor_grid_1d_i
+     module procedure cmor_grid_2d_i
+     module procedure cmor_grid_3d_i
+     module procedure cmor_grid_4d_i
+     module procedure cmor_grid_5d_i
+     module procedure cmor_grid_6d_i
+     module procedure cmor_grid_1d_r
+     module procedure cmor_grid_2d_r
+     module procedure cmor_grid_3d_r
+     module procedure cmor_grid_4d_r
+     module procedure cmor_grid_5d_r
+     module procedure cmor_grid_6d_r
+     module procedure cmor_grid_1d_d
+     module procedure cmor_grid_2d_d
+     module procedure cmor_grid_3d_d
+     module procedure cmor_grid_4d_d
+     module procedure cmor_grid_5d_d
+     module procedure cmor_grid_6d_d
+  end interface
+  interface cmor_ftn_map_data
+     module procedure cmor_ftn_map_data_1d_i
+     module procedure cmor_ftn_map_data_2d_i
+     module procedure cmor_ftn_map_data_3d_i
+     module procedure cmor_ftn_map_data_4d_i
+     module procedure cmor_ftn_map_data_5d_i
+     module procedure cmor_ftn_map_data_6d_i
+     module procedure cmor_ftn_map_data_7d_i
+     module procedure cmor_ftn_map_data_1d_r
+     module procedure cmor_ftn_map_data_2d_r
+     module procedure cmor_ftn_map_data_3d_r
+     module procedure cmor_ftn_map_data_4d_r
+     module procedure cmor_ftn_map_data_5d_r
+     module procedure cmor_ftn_map_data_6d_r
+     module procedure cmor_ftn_map_data_7d_r
+     module procedure cmor_ftn_map_data_1d_d
+     module procedure cmor_ftn_map_data_2d_d
+     module procedure cmor_ftn_map_data_3d_d
+     module procedure cmor_ftn_map_data_4d_d
+     module procedure cmor_ftn_map_data_5d_d
+     module procedure cmor_ftn_map_data_6d_d
+     module procedure cmor_ftn_map_data_7d_d
+  end interface
+contains    
+
+  function cmor_ftn_map_data_1d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:)
+    integer, pointer :: mdata(:)
+    integer, pointer :: pdata(:)
+    integer , dimension(1) :: dshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j
+    integer out
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+!!$ Ok we need to make sure the 1D array is big enough
+
+    j=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          j=j*ntimes_passed
+       else
+          j=j*vshape(i)
+       endif
+    enddo
+    if (j.gt.dshape(1)) then
+       j=CMOR_CRITICAL
+       call cmor_handle_error('data passed to cmor_write to' &
+            //'not contain enough data',j)
+    endif
+    pdata=>data
+    out=0
+  end function cmor_ftn_map_data_1d_i
+
+  function cmor_ftn_map_data_2d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:,:)
+    integer, pointer :: mdata(:,:)
+    integer, pointer :: pdata(:,:)
+    integer , dimension(2) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.2) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.2) then
+       do i=3,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.2) then
+       write(msg,*) 'In FORTRAN: you passed a 2d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,2
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 2d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2)))
+       pdata=>mdata
+       do j=1,tshape(2)
+          do i=1,tshape(1)
+             pdata(i,j) = data(i,j)
+          end do
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_2d_i
+  function cmor_ftn_map_data_3d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:,:,:)
+    integer, pointer :: mdata(:,:,:)
+    integer, pointer :: pdata(:,:,:)
+    integer , dimension(3) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.3) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+     if (ndims.gt.3) then
+       do i=4,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+   if (ndims.ne.3) then
+       write(msg,*) 'In FORTRAN: you passed a 3d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,3
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 3d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3)))
+       pdata=>mdata
+       do k=1,tshape(3)
+          do j=1,tshape(2)
+             do i=1,tshape(1)
+                pdata(i,j,k) = data(i,j,k)
+             end do
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_3d_i
+  function cmor_ftn_map_data_4d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:,:,:,:)
+    integer, pointer :: mdata(:,:,:,:)
+    integer, pointer :: pdata(:,:,:,:)
+    integer , dimension(4) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.4) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.4) then
+       do i=5,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+
+    if (ndims.ne.4) then
+       write(msg,*) 'In FORTRAN: you passed a 4d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,4
+       if (tshape(i).gt.dshape(i)) then
+           write(msg, *)  'In FORTRAN: you passed a 4d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4)))
+       pdata=>mdata
+       do l=1,tshape(4)
+          do k=1,tshape(3)
+             do j=1,tshape(2)
+                do i=1,tshape(1)
+                   pdata(i,j,k,l) = data(i,j,k,l)
+                end do
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_4d_i
+  function cmor_ftn_map_data_5d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:,:,:,:,:)
+    integer, pointer :: mdata(:,:,:,:,:)
+    integer, pointer :: pdata(:,:,:,:,:)
+    integer , dimension(5) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.5) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.5) then
+       do i=6,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+
+    if (ndims.ne.5) then
+       write(msg,*) 'In FORTRAN: you passed a 5d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,5
+       if (tshape(i).gt.dshape(i)) then
+           write(msg, *)  'In FORTRAN: you passed a 5d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5)))
+       pdata=>mdata
+       do m=1,tshape(5)
+          do l=1,tshape(4)
+             do k=1,tshape(3)
+                do j=1,tshape(2)
+                   do i=1,tshape(1)
+                      pdata(i,j,k,l,m) = data(i,j,k,l,m)
+                   end do
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_5d_i
+  function cmor_ftn_map_data_6d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:,:,:,:,:,:)
+    integer, pointer :: mdata(:,:,:,:,:,:)
+    integer, pointer :: pdata(:,:,:,:,:,:)
+    integer , dimension(6) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,n,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.6) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.6) then
+       do i=7,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.6) then
+       write(msg,*) 'In FORTRAN: you passed a 6d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,6
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 6d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5),tshape(6)))
+       pdata=>mdata
+       do n=1,tshape(6)
+          do m=1,tshape(5)
+             do l=1,tshape(4)
+                do k=1,tshape(3)
+                   do j=1,tshape(2)
+                      do i=1,tshape(1)
+                         pdata(i,j,k,l,m,n) = data(i,j,k,l,m,n)
+                      end do
+                   enddo
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_6d_i
+  function cmor_ftn_map_data_7d_i(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    integer, target:: data(:,:,:,:,:,:,:)
+    integer, pointer :: mdata(:,:,:,:,:,:,:)
+    integer, pointer :: pdata(:,:,:,:,:,:,:)
+    integer , dimension(7) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,n,o,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.ne.7) then
+       write(msg,*) 'In FORTRAN: you passed a 7d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,7
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 7d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5),tshape(6),tshape(7)))
+       pdata=>mdata
+       do o=1,tshape(7)
+          do n=1,tshape(6)
+             do m=1,tshape(5)
+                do l=1,tshape(4)
+                   do k=1,tshape(3)
+                      do j=1,tshape(2)
+                         do i=1,tshape(1)
+                            pdata(i,j,k,l,m,n,o) = data(i,j,k,l,m,n,o)
+                         end do
+                      enddo
+                   enddo
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_7d_i
+  function cmor_ftn_map_data_1d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:)
+    real, pointer :: mdata(:)
+    real, pointer :: pdata(:)
+    integer , dimension(1) :: dshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j
+    integer out
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+!!$ Ok we need to make sure the 1D array is big enough
+
+    j=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          j=j*ntimes_passed
+       else
+          j=j*vshape(i)
+       endif
+    enddo
+    if (j.gt.dshape(1)) then
+       j=CMOR_CRITICAL
+       call cmor_handle_error('data passed to cmor_write to' &
+            //'not contain enough data',j)
+    endif
+    pdata=>data
+    out=0
+  end function cmor_ftn_map_data_1d_r
+
+  function cmor_ftn_map_data_2d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:,:)
+    real, pointer :: mdata(:,:)
+    real, pointer :: pdata(:,:)
+    integer , dimension(2) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.2) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.2) then
+       do i=3,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.2) then
+       write(msg,*) 'In FORTRAN: you passed a 2d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,2
+       if (tshape(i).gt.dshape(i)) then
+           write(msg, *)  'In FORTRAN: you passed a 2d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2)))
+       pdata=>mdata
+       do j=1,tshape(2)
+          do i=1,tshape(1)
+             pdata(i,j) = data(i,j)
+          end do
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_2d_r
+  function cmor_ftn_map_data_3d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:,:,:)
+    real, pointer :: mdata(:,:,:)
+    real, pointer :: pdata(:,:,:)
+    integer , dimension(3) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.3) exit
+       
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+       
+    enddo
+
+    if (ndims.gt.3) then
+       do i=4,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.3) then
+       write(msg,*) 'In FORTRAN: you passed a 3d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,3
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 3d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3)))
+       pdata=>mdata
+       do k=1,tshape(3)
+          do j=1,tshape(2)
+             do i=1,tshape(1)
+                pdata(i,j,k) = data(i,j,k)
+             end do
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_3d_r
+  function cmor_ftn_map_data_4d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:,:,:,:)
+    real, pointer :: mdata(:,:,:,:)
+    real, pointer :: pdata(:,:,:,:)
+    integer , dimension(4) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.4) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.4) then
+       do i=5,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.4) then
+       write(msg,*) 'In FORTRAN: you passed a 4d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,4
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 4d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4)))
+       pdata=>mdata
+       do l=1,tshape(4)
+          do k=1,tshape(3)
+             do j=1,tshape(2)
+                do i=1,tshape(1)
+                   pdata(i,j,k,l) = data(i,j,k,l)
+                end do
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_4d_r
+  function cmor_ftn_map_data_5d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:,:,:,:,:)
+    real, pointer :: mdata(:,:,:,:,:)
+    real, pointer :: pdata(:,:,:,:,:)
+    integer , dimension(5) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.5) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.5) then
+       do i=6,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.5) then
+       write(msg,*) 'In FORTRAN: you passed a 5d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,5
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 5d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5)))
+       pdata=>mdata
+       do m=1,tshape(5)
+          do l=1,tshape(4)
+             do k=1,tshape(3)
+                do j=1,tshape(2)
+                   do i=1,tshape(1)
+                      pdata(i,j,k,l,m) = data(i,j,k,l,m)
+                   end do
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_5d_r
+  function cmor_ftn_map_data_6d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:,:,:,:,:,:)
+    real, pointer :: mdata(:,:,:,:,:,:)
+    real, pointer :: pdata(:,:,:,:,:,:)
+    integer , dimension(6) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,n,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.6) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.6) then
+       do i=7,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.6) then
+       write(msg,*) 'In FORTRAN: you passed a 6d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,6
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 6d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5),tshape(6)))
+       pdata=>mdata
+       do n=1,tshape(6)
+          do m=1,tshape(5)
+             do l=1,tshape(4)
+                do k=1,tshape(3)
+                   do j=1,tshape(2)
+                      do i=1,tshape(1)
+                         pdata(i,j,k,l,m,n) = data(i,j,k,l,m,n)
+                      end do
+                   enddo
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_6d_r
+  function cmor_ftn_map_data_7d_r(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    real, target:: data(:,:,:,:,:,:,:)
+    real, pointer :: mdata(:,:,:,:,:,:,:)
+    real, pointer :: pdata(:,:,:,:,:,:,:)
+    integer , dimension(7) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,n,o,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.ne.7) then
+       write(msg,*) 'In FORTRAN: you passed a 7d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,7
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 7d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5),tshape(6),tshape(7)))
+       pdata=>mdata
+       do o=1,tshape(7)
+          do n=1,tshape(6)
+             do m=1,tshape(5)
+                do l=1,tshape(4)
+                   do k=1,tshape(3)
+                      do j=1,tshape(2)
+                         do i=1,tshape(1)
+                            pdata(i,j,k,l,m,n,o) = data(i,j,k,l,m,n,o)
+                         end do
+                      enddo
+                   enddo
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_7d_r
+
+  function cmor_ftn_map_data_1d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:)
+    double precision, pointer :: mdata(:)
+    double precision, pointer :: pdata(:)
+    integer , dimension(1) :: dshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j
+    integer out
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+!!$ Ok we need to make sure the 1D array is big enough
+
+    j=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          j=j*ntimes_passed
+       else
+          j=j*vshape(i)
+       endif
+    enddo
+    if (j.gt.dshape(1)) then
+       j=CMOR_CRITICAL
+       call cmor_handle_error('data passed to cmor_write to' &
+            //'not contain enough data',j)
+    endif
+    pdata=>data
+    out=0
+  end function cmor_ftn_map_data_1d_d
+
+  function cmor_ftn_map_data_2d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:,:)
+    double precision, pointer :: mdata(:,:)
+    double precision, pointer :: pdata(:,:)
+    integer , dimension(2) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.2) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.2) then
+       do i=3,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.2) then
+       write(msg,*) 'In FORTRAN: you passed a 2d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,2
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 2d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2)))
+       pdata=>mdata
+       do j=1,tshape(2)
+          do i=1,tshape(1)
+             pdata(i,j) = data(i,j)
+          end do
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_2d_d
+  function cmor_ftn_map_data_3d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:,:,:)
+    double precision, pointer :: mdata(:,:,:)
+    double precision, pointer :: pdata(:,:,:)
+    integer , dimension(3) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.3) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.3) then
+       do i=4,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.3) then
+        write(msg,*) 'In FORTRAN: you passed a 3d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,3
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 3d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3)))
+       pdata=>mdata
+       do k=1,tshape(3)
+          do j=1,tshape(2)
+             do i=1,tshape(1)
+                pdata(i,j,k) = data(i,j,k)
+             end do
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_3d_d
+  function cmor_ftn_map_data_4d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:,:,:,:)
+    double precision, pointer :: mdata(:,:,:,:)
+    double precision, pointer :: pdata(:,:,:,:)
+    integer , dimension(4) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.4) exit 
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.4) then
+       do i=5,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.4) then
+       write(msg,*) 'In FORTRAN: you passed a 4d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i = 1, 4
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 4d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4)))
+       pdata=>mdata
+       do l=1,tshape(4)
+          do k=1,tshape(3)
+             do j=1,tshape(2)
+                do i=1,tshape(1)
+                   pdata(i,j,k,l) = data(i,j,k,l)
+                end do
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out=0
+    endif
+  end function cmor_ftn_map_data_4d_d
+  function cmor_ftn_map_data_5d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:,:,:,:,:)
+    double precision, pointer :: mdata(:,:,:,:,:)
+    double precision, pointer :: pdata(:,:,:,:,:)
+    integer , dimension(5) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.5) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.5) then
+       do i=6,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.5) then
+       write(msg,*) 'In FORTRAN: you passed a 5d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,5
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 5d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5)))
+       pdata=>mdata
+       do m=1,tshape(5)
+          do l=1,tshape(4)
+             do k=1,tshape(3)
+                do j=1,tshape(2)
+                   do i=1,tshape(1)
+                      pdata(i,j,k,l,m) = data(i,j,k,l,m)
+                   end do
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_5d_d
+  function cmor_ftn_map_data_6d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:,:,:,:,:,:)
+    double precision, pointer :: mdata(:,:,:,:,:,:)
+    double precision, pointer :: pdata(:,:,:,:,:,:)
+    integer , dimension(6) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,n,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (k.gt.6) exit
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.gt.6) then
+       do i=7,ndims
+          if ((vshape(i).eq.1).or.((vshape(i).eq.0).and.(ntimes_passed.eq.1))) ndims=ndims-1
+       enddo
+    endif
+    if (ndims.ne.6) then
+       write(msg,*) 'In FORTRAN: you passed a 6d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,6
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 6d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5),tshape(6)))
+       pdata=>mdata
+       do n=1,tshape(6)
+          do m=1,tshape(5)
+             do l=1,tshape(4)
+                do k=1,tshape(3)
+                   do j=1,tshape(2)
+                      do i=1,tshape(1)
+                         pdata(i,j,k,l,m,n) = data(i,j,k,l,m,n)
+                      end do
+                   enddo
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_6d_d
+  function cmor_ftn_map_data_7d_d(vshape,pdata,data,mdata,ntimes_passed) result(out)
+    double precision, target:: data(:,:,:,:,:,:,:)
+    double precision, pointer :: mdata(:,:,:,:,:,:,:)
+    double precision, pointer :: pdata(:,:,:,:,:,:,:)
+    integer , dimension(7) :: dshape,tshape
+    integer , dimension(7) :: vshape
+    integer ndims
+    integer i,j,k,l,m,n,o,error_code
+    integer out
+    character(200) msg
+    j=1
+    dshape = shape(data)
+    ndims=0
+    do i = 1, 7
+       if (vshape(i).ne.-1) ndims=ndims+1
+    end do
+    
+    k=1
+    do i=1,ndims
+       if (vshape(i).eq.0) then
+          tshape(k)=ntimes_passed
+       else 
+          tshape(k)=vshape(i)
+       endif
+       if ((tshape(k).eq.1).and.(dshape(k).ne.1)) then
+          ndims=ndims-1
+       else
+          k=k+1
+       endif
+       if (tshape(k).ne.dshape(k)) then
+          j=0
+       endif
+    enddo
+    if (ndims.ne.7) then
+       write(msg,*) 'In FORTRAN: you passed a 7d array of shape:',dshape,'this does not'&
+            //'match var number of dims: ',ndims,' please recheck your declaration,'&
+            //' the expected shape was: ',tshape,char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    end if
+    do i=1,7
+       if (tshape(i).gt.dshape(i)) then
+          write(msg, *)  'In FORTRAN: you passed a 7d array that'&
+               //' is not big enough to hold your var, your data shape is:',&
+               dshape,'expected shape was:',tshape,char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+    enddo
+    if (j.eq.0) then
+       allocate(mdata(tshape(1),tshape(2),tshape(3),tshape(4),tshape(5),tshape(6),tshape(7)))
+       pdata=>mdata
+       do o=1,tshape(7)
+          do n=1,tshape(6)
+             do m=1,tshape(5)
+                do l=1,tshape(4)
+                   do k=1,tshape(3)
+                      do j=1,tshape(2)
+                         do i=1,tshape(1)
+                            pdata(i,j,k,l,m,n,o) = data(i,j,k,l,m,n,o)
+                         end do
+                      enddo
+                   enddo
+                enddo
+             enddo
+          enddo
+       enddo
+       out = 1
+    else
+       pdata=>data
+       out =0
+    endif
+
+  end function cmor_ftn_map_data_7d_d
+
+
+  function cmor_close(var_id,file_name, preserved_var_id) result(ierr)
+    integer, optional :: var_id,preserved_var_id
+    character (*), optional :: file_name
+    integer ierr
+    if (present(var_id)) then
+       if (present(preserved_var_id)) then
+          if (present(file_name)) then
+             ierr = cmor_close_var_fnm_preserve_cff(var_id,file_name,&
+                  preserved_var_id)
+          else
+             ierr = cmor_close_var_nofnm_preserve_cff(var_id,preserved_var_id)
+          endif
+       else
+          if (present(file_name)) then
+             ierr = cmor_close_var_fnm_cff(var_id,file_name)
+          else
+             ierr = cmor_close_var_nofnm_cff(var_id)
+          endif
+       endif
+    else
+       ierr = cmor_close_cff()
+    endif
+  end function cmor_close
+
+  function cmor_set_grid_mapping(grid_id,mapping_name,parameter_names,&
+       parameter_values,parameter_units) result(ierr)
+    implicit none
+    integer :: ierr,grid_id
+    character(*) :: mapping_name
+    character(*) :: parameter_names(:),parameter_units(:)
+    double precision :: parameter_values(:)
+    integer i,nparam,lparam,lunits
+    character(len=1024),allocatable ::  paranm(:),paraun(:)
+    nparam = size(parameter_values)
+    lparam = 1024
+    lunits = 1024
+    allocate(paranm(nparam))
+    allocate(paraun(nparam))
+    do i = 1,nparam
+       paranm(i) = trim(parameter_names(i))//char(0)
+       paraun(i) = trim(parameter_units(i))//char(0)
+    enddo
+    
+    ierr = cmor_set_grd_map_cff(grid_id,trim(mapping_name)//char(0),nparam,&
+                                paranm(1), lparam, &
+                                parameter_values(1), &
+                                paraun(1), lunits)
+    deallocate(paranm)
+    deallocate(paraun)
+  end function cmor_set_grid_mapping
+
+
+  function cmor_grid_tvc_r(grid_id,table_entry,units,missing) result (ierr)
+    implicit none
+    character (*) table_entry,units
+    integer var_id,grid_id
+    integer ierr
+    REAL,optional:: missing
+
+    if (present(missing)) then
+       ierr = cmor_grid_cff_tvc_f(var_id,grid_id,trim(table_entry)//char(0),trim(units)//char(0),missing)
+    else
+       ierr = cmor_grid_cff_tvc_no(var_id,grid_id,trim(table_entry)//char(0),trim(units)//char(0))
+    end if
+
+    if (ierr==0) then
+       ierr = var_id
+    else
+       ierr = -ierr
+    end if
+  end function cmor_grid_tvc_r
+  function cmor_grid_tvc_d(grid_id,table_entry,units,missing) result (ierr)
+    implicit none
+    character (*) table_entry,units
+    integer var_id,grid_id
+    integer ierr
+    double precision missing
+
+    ierr = cmor_grid_cff_tvc_d(var_id,grid_id,trim(table_entry)//char(0),trim(units)//char(0),missing)
+
+    if (ierr==0) then
+       ierr = var_id
+    else
+       ierr = -ierr
+    end if
+  end function cmor_grid_tvc_d
+  function cmor_grid_tvc_i(grid_id,table_entry,units,missing) result (ierr)
+    implicit none
+    character (*) table_entry,units
+    integer var_id,grid_id
+    integer ierr
+    integer missing
+
+    ierr = cmor_grid_cff_tvc_i(var_id,grid_id,trim(table_entry)//char(0),trim(units)//char(0),missing)
+
+    if (ierr==0) then
+       ierr = var_id
+    else
+       ierr = -ierr
+    end if
+  end function cmor_grid_tvc_i
+
+  function cmor_grid_0d(axis_ids,nvertices) result (ierr)
+    implicit none
+    integer ierr,i,nvert
+    integer axis_ids(:)
+    integer ndims,grid_id
+    integer, dimension(10)::  axes_ids
+    integer, optional :: nvertices
+
+    if (present(nvertices)) then
+       nvert = nvertices
+    else
+       nvert = 0
+    end if
+    ndims = size(axis_ids,1)
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    ierr = cmor_grid_cff_nocoords(grid_id,ndims,axes_ids(1),nvert)
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_0d
+
+  function cmor_grid_1d_r(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    REAL latitude(:),longitude(:)
+    REAL,OPTIONAL :: latitude_vertices(:,:)
+    REAL,OPTIONAL :: longitude_vertices(:,:)
+!!$    REAL,OPTIONAL :: area(:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 1
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,latitude_vertices(1,1), &
+!!$                  longitude_vertices(1,1), area(1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,latitude_vertices(1,1), &
+                  longitude_vertices(1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,latitude_vertices(1,1), &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,latitude_vertices(1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,longitude_vertices(1,1), &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,longitude_vertices(1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert, &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_1d_r
+  function cmor_grid_2d_r(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    REAL latitude(:,:),longitude(:,:)
+    REAL,OPTIONAL :: latitude_vertices(:,:,:)
+    REAL,OPTIONAL :: longitude_vertices(:,:,:)
+!!$    REAL,OPTIONAL :: area(:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 2
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,latitude_vertices(1,1,1), &
+!!$                  longitude_vertices(1,1,1), area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,latitude_vertices(1,1,1), &
+                  longitude_vertices(1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,latitude_vertices(1,1,1), &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,latitude_vertices(1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,longitude_vertices(1,1,1), &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,longitude_vertices(1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert, &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_2d_r
+  function cmor_grid_3d_r(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    REAL latitude(:,:,:),longitude(:,:,:)
+    REAL,OPTIONAL :: latitude_vertices(:,:,:,:)
+    REAL,OPTIONAL :: longitude_vertices(:,:,:,:)
+!!$    REAL,OPTIONAL :: area(:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 3
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1), area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1), &
+                  longitude_vertices(1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1), &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1), &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_3d_r
+  function cmor_grid_4d_r(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    REAL latitude(:,:,:,:),longitude(:,:,:,:)
+    REAL,OPTIONAL :: latitude_vertices(:,:,:,:,:)
+    REAL,OPTIONAL :: longitude_vertices(:,:,:,:,:)
+!!$    REAL,OPTIONAL :: area(:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 4
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1), area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1), &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1), &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_4d_r
+  function cmor_grid_5d_r(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    REAL latitude(:,:,:,:,:),longitude(:,:,:,:,:)
+    REAL,OPTIONAL :: latitude_vertices(:,:,:,:,:,:)
+    REAL,OPTIONAL :: longitude_vertices(:,:,:,:,:,:)
+!!$    REAL,OPTIONAL :: area(:,:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 5
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1,1), area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_5d_r
+  function cmor_grid_6d_r(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    REAL latitude(:,:,:,:,:,:),longitude(:,:,:,:,:,:)
+    REAL,OPTIONAL :: latitude_vertices(:,:,:,:,:,:,:)
+    REAL,OPTIONAL :: longitude_vertices(:,:,:,:,:,:,:)
+!!$    REAL,OPTIONAL :: area(:,:,:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 6
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1,1,1), area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_real(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_real(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_6d_r
+
+
+  function cmor_grid_1d_d(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    DOUBLE PRECISION latitude(:),longitude(:)
+    DOUBLE PRECISION,OPTIONAL :: latitude_vertices(:,:)
+    DOUBLE PRECISION,OPTIONAL :: longitude_vertices(:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 1
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,latitude_vertices(1,1), &
+!!$                  longitude_vertices(1,1), area(1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,latitude_vertices(1,1), &
+                  longitude_vertices(1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,latitude_vertices(1,1), &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,latitude_vertices(1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,longitude_vertices(1,1), &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,longitude_vertices(1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert, &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_1d_d
+  function cmor_grid_2d_d(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    DOUBLE PRECISION latitude(:,:),longitude(:,:)
+    DOUBLE PRECISION,OPTIONAL :: latitude_vertices(:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: longitude_vertices(:,:,:)
+!!$    DOUBLE PRECISION,OPTIONAL :: area(:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 2
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,latitude_vertices(1,1,1), &
+!!$                  longitude_vertices(1,1,1), area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,latitude_vertices(1,1,1), &
+                  longitude_vertices(1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,latitude_vertices(1,1,1), &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,latitude_vertices(1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,longitude_vertices(1,1,1), &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,longitude_vertices(1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert, &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_2d_d
+  function cmor_grid_3d_d(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    DOUBLE PRECISION latitude(:,:,:),longitude(:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: latitude_vertices(:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: longitude_vertices(:,:,:,:)
+!!$    DOUBLE PRECISION,OPTIONAL :: area(:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 3
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1), area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1), &
+                  longitude_vertices(1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1), &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1), &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_3d_d
+  function cmor_grid_4d_d(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    DOUBLE PRECISION latitude(:,:,:,:),longitude(:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: latitude_vertices(:,:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: longitude_vertices(:,:,:,:,:)
+!!$    DOUBLE PRECISION,OPTIONAL :: area(:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 4
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1), area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1), &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1), &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_4d_d
+  function cmor_grid_5d_d(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    DOUBLE PRECISION latitude(:,:,:,:,:),longitude(:,:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: latitude_vertices(:,:,:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: longitude_vertices(:,:,:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 5
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1,1), area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_5d_d
+  function cmor_grid_6d_d(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    DOUBLE PRECISION latitude(:,:,:,:,:,:),longitude(:,:,:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: latitude_vertices(:,:,:,:,:,:,:)
+    DOUBLE PRECISION,OPTIONAL :: longitude_vertices(:,:,:,:,:,:,:)
+!!$    DOUBLE PRECISION,OPTIONAL :: area(:,:,:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 6
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1,1,1), area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_double(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_double(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_6d_d
+
+
+
+
+
+  function cmor_grid_1d_i(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    INTEGER latitude(:),longitude(:)
+    INTEGER,OPTIONAL :: latitude_vertices(:,:)
+    INTEGER,OPTIONAL :: longitude_vertices(:,:)
+!!$    INTEGER,OPTIONAL :: area(:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 1
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,latitude_vertices(1,1), &
+!!$                  longitude_vertices(1,1), area(1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,latitude_vertices(1,1), &
+                  longitude_vertices(1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,latitude_vertices(1,1), &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,latitude_vertices(1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert,longitude_vertices(1,1), &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert,longitude_vertices(1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1), longitude(1), &
+!!$                  nvert, &
+!!$                  area(1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1), longitude(1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_1d_i
+  function cmor_grid_2d_i(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    INTEGER latitude(:,:),longitude(:,:)
+    INTEGER,OPTIONAL :: latitude_vertices(:,:,:)
+    INTEGER,OPTIONAL :: longitude_vertices(:,:,:)
+!!$    INTEGER,OPTIONAL :: area(:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 2
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,latitude_vertices(1,1,1), &
+!!$                  longitude_vertices(1,1,1), area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,latitude_vertices(1,1,1), &
+                  longitude_vertices(1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,latitude_vertices(1,1,1), &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,latitude_vertices(1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert,longitude_vertices(1,1,1), &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert,longitude_vertices(1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1), longitude(1,1), &
+!!$                  nvert, &
+!!$                  area(1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1), longitude(1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_2d_i
+  function cmor_grid_3d_i(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    INTEGER latitude(:,:,:),longitude(:,:,:)
+    INTEGER,OPTIONAL :: latitude_vertices(:,:,:,:)
+    INTEGER,OPTIONAL :: longitude_vertices(:,:,:,:)
+!!$    INTEGER,OPTIONAL :: area(:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 3
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1), area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1), &
+                  longitude_vertices(1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1), &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1), &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1), longitude(1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1), longitude(1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_3d_i
+  function cmor_grid_4d_i(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    INTEGER latitude(:,:,:,:),longitude(:,:,:,:)
+    INTEGER,OPTIONAL :: latitude_vertices(:,:,:,:,:)
+    INTEGER,OPTIONAL :: longitude_vertices(:,:,:,:,:)
+!!$    INTEGER,OPTIONAL :: area(:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 4
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1), area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1), &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1), &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1), longitude(1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1), longitude(1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_4d_i
+  function cmor_grid_5d_i(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    INTEGER latitude(:,:,:,:,:),longitude(:,:,:,:,:)
+    INTEGER,OPTIONAL :: latitude_vertices(:,:,:,:,:,:)
+    INTEGER,OPTIONAL :: longitude_vertices(:,:,:,:,:,:)
+!!$    INTEGER,OPTIONAL :: area(:,:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 5
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1,1), area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1), longitude(1,1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_5d_i
+  function cmor_grid_6d_i(axis_ids,latitude,longitude,&
+       latitude_vertices,longitude_vertices) result(ierr)
+    implicit none
+    integer axis_ids(:)
+    INTEGER latitude(:,:,:,:,:,:),longitude(:,:,:,:,:,:)
+    INTEGER,OPTIONAL :: latitude_vertices(:,:,:,:,:,:,:)
+    INTEGER,OPTIONAL :: longitude_vertices(:,:,:,:,:,:,:)
+!!$    INTEGER,OPTIONAL :: area(:,:,:,:,:,:)
+    integer ierr,grid_id,ndims,nvert,error_code
+    character(1024) msg
+    integer i
+    integer, dimension(10)::  axes_ids
+    
+    ndims = 6
+    do i = 1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    if (present(latitude_vertices)) then
+       nvert = size(latitude_vertices,ndims+1)
+       if (present(longitude_vertices)) then
+          if (size(longitude_vertices,ndims+1).ne.nvert) then
+             msg = 'cmor_grid (fortran):: longitudes and latitudes'//&
+                  'vertices do not have the same number of vertices'//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          endif
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+!!$                  longitude_vertices(1,1,1,1,1,1,1), area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noarea_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+                  longitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       else
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblon_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,latitude_vertices(1,1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nobloar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,latitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       endif
+    else
+       if (present(longitude_vertices)) then
+          nvert = size(latitude_vertices,ndims+1)
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_noblat_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert,longitude_vertices(1,1,1,1,1,1,1), &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_noblaar_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert,longitude_vertices(1,1,1,1,1,1,1))
+!!$          endif
+       else
+          nvert=0
+!!$          if (present(area)) then
+!!$             ierr = cmor_grid_cff_nobnds_int(grid_id,ndims,axes_ids(1),&
+!!$                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+!!$                  nvert, &
+!!$                  area(1,1,1,1,1,1))
+!!$          else
+             ierr = cmor_grid_cff_nothg_int(grid_id,ndims,axes_ids(1),&
+                  latitude(1,1,1,1,1,1), longitude(1,1,1,1,1,1), &
+                  nvert)
+!!$          endif
+       endif
+    endif
+    if (ierr.eq.0) then
+       ierr = grid_id
+    endif
+  end function cmor_grid_6d_i
+
+
+  FUNCTION cmor_write_1d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL, target :: data(:)
+    REAL, pointer :: mdata(:)
+    real, pointer :: pdata(:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+    
+  END FUNCTION cmor_write_1d_r
+  FUNCTION cmor_write_2d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL,target :: data(:,:)
+    REAL,pointer :: mdata(:,:)
+    REAL, pointer :: pdata(:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+    
+  END FUNCTION cmor_write_2d_r
+  FUNCTION cmor_write_3d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL, target :: data(:,:,:)
+    REAL, pointer :: mdata(:,:,:)
+    REAL, pointer :: pdata(:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+       nullify(pdata)
+   
+  END FUNCTION cmor_write_3d_r
+  FUNCTION cmor_write_4d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL, target :: data(:,:,:,:)
+    REAL, pointer :: mdata(:,:,:,:)
+    REAL, pointer :: pdata(:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,vshape(7),did_malloc
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+       nullify(pdata)
+  END FUNCTION cmor_write_4d_r
+  FUNCTION cmor_write_5d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL, target :: data(:,:,:,:,:)
+    REAL, pointer :: mdata(:,:,:,:,:)
+    REAL, pointer :: pdata(:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+    
+  END FUNCTION cmor_write_5d_r
+  FUNCTION cmor_write_6d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL, target :: data(:,:,:,:,:,:)
+    REAL, pointer :: mdata(:,:,:,:,:,:)
+    REAL, pointer :: pdata(:,:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+   
+  END FUNCTION cmor_write_6d_r
+  FUNCTION cmor_write_7d_r(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    REAL, target :: data(:,:,:,:,:,:,:)
+    REAL, pointer :: mdata(:,:,:,:,:,:,:)
+    REAL, pointer :: pdata(:,:,:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_real(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_real_nobnds(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_real_notime(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(pdata)
+    endif
+    nullify(pdata)
+  END FUNCTION cmor_write_7d_r
+
+  FUNCTION cmor_write_1d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION,target :: data(:)
+    DOUBLE PRECISION,pointer :: mdata(:)
+    DOUBLE PRECISION, pointer:: pdata(:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,vshape(7),did_malloc
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,1)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,pdata(1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,pdata(1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,pdata(1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    end if
+    nullify(pdata)
+  END FUNCTION cmor_write_1d_d
+  FUNCTION cmor_write_2d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION,target :: data(:,:)
+    DOUBLE PRECISION,pointer :: mdata(:,:)
+    DOUBLE PRECISION, pointer :: pdata(:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,data(1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,data(1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,data(1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+   
+  END FUNCTION cmor_write_2d_d
+  FUNCTION cmor_write_3d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION , target:: data(:,:,:)
+    DOUBLE PRECISION , pointer:: mdata(:,:,:)
+    DOUBLE PRECISION, pointer :: pdata(:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,1)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,pdata(1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,pdata(1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,pdata(1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+  END FUNCTION cmor_write_3d_d
+
+  FUNCTION cmor_write_4d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION, INTENT(IN), target :: data(:,:,:,:)
+    DOUBLE PRECISION, pointer :: mdata(:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp
+    character(1024) suf
+    integer   vshape(7),did_malloc
+    double precision, pointer :: pdata(:,:,:,:)
+
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,pdata(1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,pdata(1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,pdata(1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) deallocate(mdata)
+    nullify(pdata)
+  END FUNCTION cmor_write_4d_d
+  FUNCTION cmor_write_5d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION, target :: data(:,:,:,:,:)
+    DOUBLE PRECISION, pointer :: mdata(:,:,:,:,:)
+    DOUBLE PRECISION, pointer :: pdata(:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,1)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,pdata(1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,pdata(1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,pdata(1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+  END FUNCTION cmor_write_5d_d
+  FUNCTION cmor_write_6d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION,target :: data(:,:,:,:,:,:)
+    DOUBLE PRECISION,pointer :: mdata(:,:,:,:,:,:)
+    DOUBLE PRECISION, pointer :: pdata(:,:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(pdata)
+    endif
+    nullify(pdata)
+    
+  END FUNCTION cmor_write_6d_d
+  FUNCTION cmor_write_7d_d(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    DOUBLE PRECISION, target :: data(:,:,:,:,:,:,:)
+    DOUBLE PRECISION, pointer :: mdata(:,:,:,:,:,:,:)
+    DOUBLE PRECISION, pointer :: pdata(:,:,:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_double(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_double_nobnds(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_double_notime(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+  END FUNCTION cmor_write_7d_d
+
+  FUNCTION cmor_write_1d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER, target :: data(:)
+    INTEGER, pointer :: mdata(:)
+    INTEGER, pointer :: pdata(:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,pdata(1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,pdata(1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,pdata(1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+       
+  END FUNCTION cmor_write_1d_i
+  FUNCTION cmor_write_2d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER,target :: data(:,:)
+    INTEGER,pointer :: mdata(:,:)
+    INTEGER, pointer :: pdata(:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,data(1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,data(1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,data(1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+    
+  END FUNCTION cmor_write_2d_i
+  FUNCTION cmor_write_3d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER, target :: data(:,:,:)
+    INTEGER, pointer :: mdata(:,:,:)
+    INTEGER, pointer :: pdata(:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,pdata(1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,pdata(1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,pdata(1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+   
+  END FUNCTION cmor_write_3d_i
+  FUNCTION cmor_write_4d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER, target :: data(:,:,:,:)
+    INTEGER, pointer :: mdata(:,:,:,:)
+    INTEGER, pointer :: pdata(:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,pdata(1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,pdata(1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,pdata(1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+   
+  END FUNCTION cmor_write_4d_i
+  FUNCTION cmor_write_5d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER , target:: data(:,:,:,:,:)
+    INTEGER , pointer:: mdata(:,:,:,:,:)
+    INTEGER, pointer :: pdata(:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,pdata(1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,pdata(1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,pdata(1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+  END FUNCTION cmor_write_5d_i
+  FUNCTION cmor_write_6d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER,target :: data(:,:,:,:,:,:)
+    INTEGER, pointer :: mdata(:,:,:,:,:,:)
+    INTEGER, pointer :: pdata(:,:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,pdata(1,1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    end if
+    nullify(pdata)
+       
+  END FUNCTION cmor_write_6d_i
+  FUNCTION cmor_write_7d_i(var_id, data, file_suffix, ntimes_passed,  &
+        time_vals,time_bnds,store_with) RESULT(ierr)
+    implicit none
+    INTEGER, target :: data(:,:,:,:,:,:,:)
+    INTEGER, pointer :: mdata(:,:,:,:,:,:,:)
+    INTEGER, pointer :: pdata(:,:,:,:,:,:,:)
+    INTEGER, INTENT(in) ::var_id
+    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+    INTEGER, INTENT(in), OPTIONAL :: store_with
+    integer refvar,ierr,ntp,did_malloc,vshape(7)
+    character(1024) suf
+    call cmor_get_original_shape_cff(var_id,vshape(1))
+    if (present(ntimes_passed)) then 
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ntimes_passed)
+    else
+       ierr = cmor_ftn_get_tlen_cff(var_id)
+       did_malloc = cmor_ftn_map_data(vshape,pdata,data,mdata,ierr)
+    endif
+    if (present(file_suffix)) then
+       suf = trim(file_suffix)//char(0)
+    else
+       suf = char(0)
+    endif
+
+    if (present(store_with)) then
+       refvar = store_with
+    else
+       refvar = -1 ! means do not pass it
+    end if
+    if (present(ntimes_passed)) then
+       ntp = ntimes_passed
+    else
+       ntp=0
+    endif
+    if (present(time_vals)) then
+       if (ntp==0) ntp = size(time_vals)
+       if (present(time_bnds)) then
+          ierr = cmor_write_cff_int(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),time_bnds(1,1),refvar)
+       else
+          ierr = cmor_write_cff_int_nobnds(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+               time_vals(1),refvar)
+       end if
+    else
+       ierr = cmor_write_cff_int_notime(var_id,pdata(1,1,1,1,1,1,1),suf,ntp,&
+            refvar)
+    endif
+    if (did_malloc.eq.1) then
+       deallocate(mdata)
+    endif
+    nullify(pdata)
+
+  END FUNCTION cmor_write_7d_i
+
+!!$  FUNCTION cmor_write_1d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_1d_l
+!!$  FUNCTION cmor_write_2d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:,:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1,1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1,1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1,1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_2d_l
+!!$  FUNCTION cmor_write_3d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:,:,:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1,1,1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1,1,1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1,1,1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_3d_l
+!!$  FUNCTION cmor_write_4d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:,:,:,:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1,1,1,1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1,1,1,1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1,1,1,1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_4d_l
+!!$  FUNCTION cmor_write_5d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:,:,:,:,:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1,1,1,1,1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1,1,1,1,1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1,1,1,1,1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_5d_l
+!!$  FUNCTION cmor_write_6d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:,:,:,:,:,:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1,1,1,1,1,1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1,1,1,1,1,1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1,1,1,1,1,1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_6d_l
+!!$  FUNCTION cmor_write_7d_l(var_id, data, file_suffix, ntimes_passed,  &
+!!$        time_vals,time_bnds,store_with) RESULT(ierr)
+!!$    implicit none
+!!$    INTEGER (KIND=8), INTENT(IN) :: data(:,:,:,:,:,:,:)
+!!$    INTEGER, INTENT(in) ::var_id
+!!$    CHARACTER(len=*), INTENT(in), OPTIONAL :: file_suffix
+!!$    INTEGER, INTENT(in), OPTIONAL :: ntimes_passed
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_vals(:)
+!!$    DOUBLE PRECISION, INTENT(in), OPTIONAL :: time_bnds(:,:)
+!!$    INTEGER, INTENT(in), OPTIONAL :: store_with
+!!$    integer refvar,ierr,n(1),ntp
+!!$    character(1024) suf
+!!$    if (present(file_suffix)) then
+!!$       suf = trim(file_suffix)//char(0)
+!!$    else
+!!$       suf = char(0)
+!!$    endif
+!!$
+!!$    if (present(store_with)) then
+!!$       refvar = store_with
+!!$    else
+!!$       refvar = -1 ! means do not pass it
+!!$    end if
+!!$    if (present(ntimes_passed)) then
+!!$       ntp = ntimes_passed
+!!$    else
+!!$       ntp=0
+!!$    endif
+!!$    if (present(time_vals)) then
+!!$       if (ntp==0) ntp = size(time_vals)
+!!$       if (present(time_bnds)) then
+!!$          ierr = cmor_write_cff_long(var_id,data(1,1,1,1,1,1,1),suf,ntp,&
+!!$               time_vals(1),time_bnds(1,1),refvar)
+!!$       else
+!!$          ierr = cmor_write_cff_long_nobnds(var_id,data(1,1,1,1,1,1,1),suf,ntp,&
+!!$               time_vals(1),refvar)
+!!$       end if
+!!$    else
+!!$       ierr = cmor_write_cff_long_notime(var_id,data(1,1,1,1,1,1,1),suf,ntp,&
+!!$            refvar)
+!!$    endif
+!!$  END FUNCTION cmor_write_7d_l
+
+  function cmor_variable_double(table,table_entry,units,axis_ids,missing_value,&
+       tolerance,positive,original_name,history,comment) result(ierr)
+    implicit none
+    character(*),optional ::table,positive,original_name,history,comment
+    character(*) table_entry,units
+    integer axis_ids(:),ierr,l,var_id
+    double precision ::  missing_value, tol
+    double precision, optional ::  tolerance
+    character(1024) pos,onm,hist,com,tbl,unit
+    integer i
+    integer, dimension(10) :: axes_ids
+    l = size(axis_ids)
+    do i=1, l
+       axes_ids(i) = axis_ids(l-i+1)
+    enddo
+    unit = trim(units)//char(0)
+    tbl = trim(table_entry)//char(0)
+
+    if (present(table)) then
+       i = cmor_load_table(table)
+    endif
+
+    if (present(tolerance)) then
+       tol = tolerance
+    else
+       tol = 1.e-4
+    end if
+    
+    if (present(positive)) then
+       pos = trim(positive)//char(0)
+    else
+       pos = char(0)
+    end if
+    if (present(original_name)) then
+       onm = trim(original_name)//char(0)
+    else
+       onm = char(0)
+    end if
+
+    if (present(history)) then
+       hist = trim(history)//char(0)
+    else
+       hist = char(0)
+    end if
+    if (present(comment)) then
+       com = trim(comment)//char(0)
+    else
+       com = char(0)
+    end if
+    
+    
+    ierr = cmor_variable_cff_double(var_id,tbl,unit,l,axes_ids(1),missing_value,tol,pos,onm,hist,com)
+
+    if (ierr.eq.0) then
+       ierr = var_id
+    else
+       ierr = -ierr
+    end if
+  end function cmor_variable_double
+  function cmor_variable_real(table,table_entry,units,axis_ids,missing_value,&
+       tolerance,positive,original_name,history,comment) result(ierr)
+    implicit none
+    character(*),optional ::table,positive,original_name,history,comment
+    character(*) table_entry,units
+    integer axis_ids(:),ierr,l,var_id
+    double precision ::  tol
+    real, optional ::  missing_value
+    double precision, optional ::  tolerance
+    character(1024) pos,onm,hist,com,tbl,unit
+    integer i
+    integer, dimension(10) :: axes_ids
+
+    l = size(axis_ids)
+    do i=1, l
+       axes_ids(i) = axis_ids(l-i+1)
+    enddo
+
+    unit = trim(units)//char(0)
+    tbl = trim(table_entry)//char(0)
+
+    if (present(table)) then
+       i = cmor_load_table(table)
+    endif
+
+    if (present(tolerance)) then
+       tol = tolerance
+    else
+       tol = 1.e-4
+    end if
+    
+    if (present(positive)) then
+       pos = trim(positive)//char(0)
+    else
+       pos = char(0)
+    end if
+    if (present(original_name)) then
+       onm = trim(original_name)//char(0)
+    else
+       onm = char(0)
+    end if
+
+    if (present(history)) then
+       hist = trim(history)//char(0)
+    else
+       hist = char(0)
+    end if
+    if (present(comment)) then
+       com = trim(comment)//char(0)
+    else
+       com = char(0)
+    end if
+    
+    l = size(axis_ids)
+    
+    if (present(missing_value)) then
+       ierr = cmor_variable_cff_real(var_id,tbl,unit,l,axes_ids(1),missing_value,tol,pos,onm,hist,com)
+    else 
+       ierr = cmor_variable_cff_nomiss(var_id,tbl,unit,l,axes_ids(1),tol,pos,onm,hist,com)
+    endif
+
+    if (ierr.eq.0) then
+       ierr = var_id
+    else
+       ierr = -ierr
+    end if
+  end function cmor_variable_real
+  function cmor_variable_int(table,table_entry,units,axis_ids,missing_value,&
+       tolerance,positive,original_name,history,comment) result(ierr)
+    implicit none
+    character(*),optional ::table,positive,original_name,history,comment
+    character(*) table_entry,units
+    integer axis_ids(:),ierr,l,var_id
+    double precision ::  tol
+    integer ::  missing_value
+    double precision, optional ::  tolerance
+    character(1024) pos,onm,hist,com,tbl,unit
+    integer i
+    integer, dimension(10) :: axes_ids
+    l = size(axis_ids)
+    do i=1, l
+       axes_ids(i) = axis_ids(l-i+1)
+    enddo
+
+    unit = trim(units)//char(0)
+    tbl = trim(table_entry)//char(0)
+
+    if (present(table)) then
+       i = cmor_load_table(table)
+    endif
+
+    if (present(tolerance)) then
+       tol = tolerance
+    else
+       tol = 1.e-4
+    end if
+    
+    if (present(positive)) then
+       pos = trim(positive)//char(0)
+    else
+       pos = char(0)
+    end if
+    if (present(original_name)) then
+       onm = trim(original_name)//char(0)
+    else
+       onm = char(0)
+    end if
+
+    if (present(history)) then
+       hist = trim(history)//char(0)
+    else
+       hist = char(0)
+    end if
+    if (present(comment)) then
+       com = trim(comment)//char(0)
+    else
+       com = char(0)
+    end if
+    
+    l = size(axis_ids)
+    
+    ierr = cmor_variable_cff_int(var_id,tbl,unit,l,axes_ids(1),missing_value,tol,pos,onm,hist,com)
+
+    if (ierr.eq.0) then
+       ierr = var_id
+    else
+       ierr = -ierr
+    end if
+  end function cmor_variable_int
+!!$  function cmor_variable_long(table,table_entry,units,axis_ids,missing_value,&
+!!$       tolerance,positive,original_name,history,comment) result(ierr)
+!!$    implicit none
+!!$    character(*),optional ::table,positive,original_name,history,comment
+!!$    character(*) table_entry,units
+!!$    integer axis_ids(:),ierr,l,var_id
+!!$    double precision ::  tol
+!!$    integer (kind=8) ::  missing_value
+!!$    double precision, optional ::  tolerance
+!!$    character(1024) pos,onm,hist,com,tbl,unit
+!!$    integer i
+!!$    integer, dimension(10) :: axes_ids
+!!$    l = size(axis_ids)
+!!$    do i=1, l
+!!$       axes_ids(i) = axis_ids(l-i+1)
+!!$    enddo
+!!$
+!!$    unit = trim(units)//char(0)
+!!$    tbl = trim(table_entry)//char(0)
+!!$
+!!$    if (present(table)) then
+!!$       l = cmor_load_table(table)
+!!$    endif
+!!$
+!!$    if (present(tolerance)) then
+!!$       tol = tolerance
+!!$    else
+!!$       tol = 1.e-4
+!!$    end if
+!!$    
+!!$    if (present(positive)) then
+!!$       pos = trim(positive)//char(0)
+!!$    else
+!!$       pos = char(0)
+!!$    end if
+!!$    if (present(original_name)) then
+!!$       onm = trim(original_name)//char(0)
+!!$    else
+!!$       onm = char(0)
+!!$    end if
+!!$
+!!$    if (present(history)) then
+!!$       hist = trim(history)//char(0)
+!!$    else
+!!$       hist = char(0)
+!!$    end if
+!!$    if (present(comment)) then
+!!$       com = trim(comment)//char(0)
+!!$    else
+!!$       com = char(0)
+!!$    end if
+!!$    
+!!$    l = size(axis_ids)
+!!$    
+!!$    ierr = cmor_variable_cff_long(var_id,tbl,unit,l,axes_ids(1),missing_value,tol,pos,onm,hist,com)
+!!$
+!!$    if (ierr.eq.0) then
+!!$       ierr = var_id
+!!$    else
+!!$       ierr = -ierr
+!!$    end if
+!!$  end function cmor_variable_long
+
+  function cmor_zfactor_novals(zaxis_id,zfactor_name,axis_ids,&
+       units) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in) :: axis_ids(:)
+    character(*) , optional :: units
+    integer i,ierr,ndims,zfactor
+    character(1024) unit,zfnm
+    integer, dimension(10) :: axes_ids
+    ndims = size(axis_ids)
+    do i=1, ndims
+       axes_ids(i) = axis_ids(ndims-i+1)
+    enddo
+    
+    zfnm = zfactor_name//char(0)
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    ierr = cmor_zfactor_cff_novals(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1))
+    if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+  end function cmor_zfactor_novals
+  function cmor_zfactor_double(zaxis_id,zfactor_name,axis_ids,&
+       units,zfactor_values,zfactor_bounds) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in), optional :: axis_ids(:)
+    character(*) , optional :: units
+    double precision :: zfactor_values(:)
+    double precision, optional :: zfactor_bounds(:)
+    integer ierr,ndims,zfactor
+    character(1024) msg,unit,zfnm
+    integer axes_ids(1)
+    integer error_code
+    
+    zfnm = trim(zfactor_name)//char(0)
+    if (present(axis_ids)) then
+       ndims = size(axis_ids)
+       if (ndims.ne.1) then
+          msg = 'cmor_zfactor (fortran):: you passed ndims greater than 1 and zfactor_values, this '&
+               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=axis_ids(1)
+    else
+       ndims = 0
+       if (size(zfactor_values).ne.1) then
+          msg = 'cmor_zfactor(fortran):: ndims and zfactor_values length do not match'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=0
+    endif
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    if (present(zfactor_bounds)) then
+       if (size(zfactor_bounds).ne.size(zfactor_values)+1) then
+          msg = 'cmor_zfactor(fortran) zfactor_bounds length is not zfactor_values + 1 for zfactor:'//zfactor_name//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       ierr = cmor_zfactor_cff_double(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1),zfactor_bounds(1))
+    else
+       ierr = cmor_zfactor_cff_double_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1))
+    endif
+    if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+  end function cmor_zfactor_double
+  function cmor_zfactor_double_0dvalues(zaxis_id,zfactor_name,axis_ids,&
+       units,zfactor_values,zfactor_bounds) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in), optional :: axis_ids(:)
+    character(*) , optional :: units
+    double precision :: zfactor_values
+    double precision :: zfactor_value(1)
+    double precision, optional :: zfactor_bounds(2)
+    integer ierr,ndims,zfactor
+    character(1024) msg,unit,zfnm
+    integer axes_ids(1)
+    integer error_code
+    
+    zfnm = trim(zfactor_name)//char(0)
+    zfactor_value(1)=zfactor_values
+    if (present(axis_ids)) then
+       ndims = size(axis_ids)
+       if (ndims.ne.1) then
+          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=axis_ids(1)
+    else
+       ndims = 0
+       axes_ids(1)=0
+    endif
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    if (present(zfactor_bounds)) then
+       ierr = cmor_zfactor_cff_double(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1),zfactor_bounds(1))
+    else
+       ierr = cmor_zfactor_cff_double_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1))
+    endif
+    if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+  end function cmor_zfactor_double_0dvalues
+  function cmor_zfactor_real(zaxis_id,zfactor_name,axis_ids,&
+       units,zfactor_values,zfactor_bounds) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in), optional :: axis_ids(:)
+    character(*) , optional :: units
+    real :: zfactor_values(:)
+    real, optional :: zfactor_bounds(:)
+    integer ierr,ndims,zfactor
+    character(1024) msg,unit,zfnm
+    integer axes_ids(1)
+    integer error_code
+    
+    zfnm = trim(zfactor_name)//char(0)
+    if (present(axis_ids)) then
+       ndims = size(axis_ids)
+       if (ndims.ne.1) then
+          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=axis_ids(1)
+    else
+       ndims = 0
+       if (size(zfactor_values).ne.1) then
+          msg = 'cmor_zfactor(fortran) :: ndims and zfactor_values length do not match'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=0
+    endif
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    if (present(zfactor_bounds)) then
+       if (size(zfactor_bounds).ne.size(zfactor_values)+1) then
+          msg = 'cmor_zfactor(fortran) zfactor_bounds length is not zfactor_values + 1 for zfactor:'//zfactor_name//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       ierr = cmor_zfactor_cff_real(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1),zfactor_bounds(1))
+    else
+       ierr = cmor_zfactor_cff_real_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1))
+    endif
+     if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+ end function cmor_zfactor_real
+  function cmor_zfactor_real_0dvalues(zaxis_id,zfactor_name,axis_ids,&
+       units,zfactor_values,zfactor_bounds) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in), optional :: axis_ids(:)
+    character(*) , optional :: units
+    real :: zfactor_values
+    real :: zfactor_value(1)
+    real, optional :: zfactor_bounds(2)
+    integer ierr,ndims,zfactor
+    character(1024) msg,unit,zfnm
+    integer axes_ids(1)
+    integer error_code
+    
+    zfnm = trim(zfactor_name)//char(0)
+    zfactor_value(1)=zfactor_values
+    if (present(axis_ids)) then
+       ndims = size(axis_ids)
+       if (ndims.ne.1) then
+          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=axis_ids(1)
+    else
+       ndims = 0
+       axes_ids(1)=0
+    endif
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    if (present(zfactor_bounds)) then
+       ierr = cmor_zfactor_cff_real(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1),zfactor_bounds(1))
+    else
+       ierr = cmor_zfactor_cff_real_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1))
+    endif
+     if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+ end function cmor_zfactor_real_0dvalues
+  function cmor_zfactor_int(zaxis_id,zfactor_name,axis_ids,&
+       units,zfactor_values,zfactor_bounds) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in), optional :: axis_ids(:)
+    character(*) , optional :: units
+    integer :: zfactor_values(:)
+    integer, optional :: zfactor_bounds(:)
+    integer ierr,ndims,zfactor
+    character(1024) msg,unit,zfnm
+    integer axes_ids(1)
+    integer error_code
+    
+    zfnm = trim(zfactor_name)//char(0)
+    if (present(axis_ids)) then
+       ndims = size(axis_ids)
+       if (ndims.ne.1) then
+          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=axis_ids(1)
+    else
+       ndims = 0
+       if (size(zfactor_values).ne.1) then
+          msg = 'cmor_zfactor (fortran) ::ndims and zfactor_values length do not match'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=0
+    endif
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    if (present(zfactor_bounds)) then
+       if (size(zfactor_bounds).ne.size(zfactor_values)+1) then
+          msg = 'cmor_zfactor(fortran) zfactor_bounds length is not zfactor_values + 1 for zfactor:'//zfactor_name//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       ierr = cmor_zfactor_cff_int(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1),zfactor_bounds(1))
+    else
+       ierr = cmor_zfactor_cff_int_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1))
+    endif
+    if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+  end function cmor_zfactor_int
+  function cmor_zfactor_int_0dvalues(zaxis_id,zfactor_name,axis_ids,&
+       units,zfactor_values,zfactor_bounds) result(ierr)
+    implicit none
+    integer zaxis_id
+    character(*) zfactor_name
+    integer, intent(in), optional :: axis_ids(:)
+    character(*) , optional :: units
+    integer :: zfactor_values
+    integer :: zfactor_value(1)
+    integer, optional :: zfactor_bounds(2)
+    integer ierr,ndims,zfactor
+    character(1024) msg,unit,zfnm
+    integer axes_ids(1)
+    integer error_code
+    
+    zfnm = trim(zfactor_name)//char(0)
+    zfactor_value(1)=zfactor_values
+    if (present(axis_ids)) then
+       ndims = size(axis_ids)
+       if (ndims.ne.1) then
+          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       endif
+       axes_ids(1)=axis_ids(1)
+    else
+       ndims = 0
+       axes_ids(1)=0
+    endif
+    if (present(units)) then
+       unit = trim(units)//char(0)
+    else 
+       unit=char(0)
+    endif
+    if (present(zfactor_bounds)) then
+       ierr = cmor_zfactor_cff_int(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1),zfactor_bounds(1))
+    else
+       ierr = cmor_zfactor_cff_int_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1))
+    endif
+    if (ierr.eq.0) then
+       ierr = zfactor
+    else
+       ierr = -ierr
+    end if
+  end function cmor_zfactor_int_0dvalues
+!!$  function cmor_zfactor_long(zaxis_id,zfactor_name,axis_ids,&
+!!$       units,zfactor_values,zfactor_bounds) result(ierr)
+!!$    implicit none
+!!$    integer zaxis_id
+!!$    character(*) zfactor_name
+!!$    integer, intent(in), optional :: axis_ids(:)
+!!$    character(*) , optional :: units
+!!$    integer(kind=8) :: zfactor_values(:)
+!!$    integer(kind=8), optional :: zfactor_bounds(:)
+!!$    integer i,ierr,ndims,zfactor
+!!$    character(1024) msg,unit,zfnm
+!!$    integer axes_ids(1)
+!!$    integer error_code
+!!$    
+!!$    zfnm = trim(zfactor_name)//char(0)
+!!$    if (present(axis_ids)) then
+!!$       ndims = size(axis_ids)
+!!$       if (ndims.ne.1) then
+!!$          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+!!$               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+!!$          error_code = CMOR_CRITICAL
+!!$          call cmor_handle_error(msg,error_code)
+!!$       endif
+!!$       axes_ids(1)=axis_ids(1)
+!!$    else
+!!$       ndims = 0
+!!$       if (size(zfactor_values).ne.1) then
+!!$          msg = 'cmor_zfactor(fortran):: ndims and zfactor_values length do not match'//char(0)
+!!$          error_code = CMOR_CRITICAL
+!!$          call cmor_handle_error(msg,error_code)
+!!$       endif
+!!$       axes_ids(1)=0
+!!$    endif
+!!$    if (present(units)) then
+!!$       unit = trim(units)//char(0)
+!!$    else 
+!!$       unit=char(0)
+!!$    endif
+!!$    if (present(zfactor_bounds)) then
+!!$       if (size(zfactor_bounds).ne.size(zfactor_values)+1) then
+!!$          msg = 'cmor_zfactor(fortran) zfactor_bounds length is not zfactor_values + 1 for zfactor:'//zfactor_name//char(0)
+!!$          error_code = CMOR_CRITICAL
+!!$          call cmor_handle_error(msg,error_code)
+!!$       endif
+!!$       ierr = cmor_zfactor_cff_long(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1),zfactor_bounds(1))
+!!$    else
+!!$       ierr = cmor_zfactor_cff_long_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_values(1))
+!!$    endif
+!!$     if (ierr.eq.0) then
+!!$       ierr = zfactor
+!!$    else
+!!$       ierr = -ierr
+!!$    end if
+!!$ end function cmor_zfactor_long
+!!$  function cmor_zfactor_long_0dvalues(zaxis_id,zfactor_name,axis_ids,&
+!!$       units,zfactor_values,zfactor_bounds) result(ierr)
+!!$    implicit none
+!!$    integer zaxis_id
+!!$    character(*) zfactor_name
+!!$    integer, intent(in), optional :: axis_ids(:)
+!!$    character(*) , optional :: units
+!!$    integer(kind=8) :: zfactor_values
+!!$    integer(kind=8) :: zfactor_value(1)
+!!$    integer(kind=8), optional :: zfactor_bounds(2)
+!!$    integer i,ierr,ndims,zfactor
+!!$    character(1024) msg,unit,zfnm
+!!$    integer axes_ids(1)
+!!$    integer error_code
+!!$    
+!!$    zfnm = trim(zfactor_name)//char(0)
+!!$    zfactor_value(1)=zfactor_values
+!!$    if (present(axis_ids)) then
+!!$       ndims = size(axis_ids)
+!!$       if (ndims.ne.1) then
+!!$          msg = 'cmor_zfactor(fortran) you passed ndims greater than 1 and zfactor_values, this '&
+!!$               //'is not acceptable, use cmor_write to write zfactor_values'//char(0)
+!!$          error_code = CMOR_CRITICAL
+!!$          call cmor_handle_error(msg,error_code)
+!!$       endif
+!!$       axes_ids(1)=axis_ids(1)
+!!$    else
+!!$       ndims = 0
+!!$       axes_ids(1)=0
+!!$    endif
+!!$    if (present(units)) then
+!!$       unit = trim(units)//char(0)
+!!$    else 
+!!$       unit=char(0)
+!!$    endif
+!!$    if (present(zfactor_bounds)) then
+!!$       ierr = cmor_zfactor_cff_long(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1),zfactor_bounds(1))
+!!$    else
+!!$       ierr = cmor_zfactor_cff_long_nobnds(zfactor,zaxis_id,zfnm,unit,ndims,axes_ids(1),zfactor_value(1))
+!!$    endif
+!!$    if (ierr.eq.0) then
+!!$       ierr = zfactor
+!!$    else
+!!$       ierr = -ierr
+!!$    end if
+!!$  end function cmor_zfactor_long_0dvalues
+
+  subroutine cmor_set_table(table_id)
+    integer table_id
+    call cmor_set_table_cff(table_id)
+  end subroutine cmor_set_table
+
+  function cmor_load_table(table) result(table_id)
+    integer table_id
+    character(*) table
+    call cmor_load_table_cff(trim(table)//char(0),table_id)
+  end function cmor_load_table
+
+  function cmor_axis_char(table,table_entry,units,length,&
+       coord_vals,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    character(*) :: coord_vals(:)
+    integer, optional :: length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer l,cell_bounds_ndim,i
+    integer ierr,error_code
+    character(*), optional :: table
+    integer axis_id
+
+    if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    if (present(interval)) then
+       interv = trim(interval)//char(0)
+    else
+       interv = char(0)
+    endif
+    
+    
+    if (.not.present(length)) then
+       l = size(coord_vals)
+    else
+       l= length
+       if (l.gt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is only",size(coord_vals),&
+               "long"//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       else if (l.lt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is really",size(coord_vals),&
+               "long, check you really don't want to use it in its integrality"//char(0)
+          error_code = CMOR_WARNING
+          call cmor_handle_error(msg,error_code)
+       endif
+    endif
+    cell_bounds_ndim = 0
+    do i=0,l
+       if (len(coord_vals(i)).gt.cell_bounds_ndim) then 
+          cell_bounds_ndim = len(coord_vals(i))
+       endif
+    enddo
+    ierr = cmor_axis_cff_nobnds_char(axis_id,trim(table_entry)//char(0),&
+         trim(units)//char(0),l,coord_vals(1),cell_bounds_ndim,interv)
+
+    if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+  end function cmor_axis_char
+  function cmor_axis_double_1(table,table_entry,units,length,coord_vals,&
+       cell_bounds,cell_bounds_ndim,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    double precision, optional :: coord_vals(:),cell_bounds(:)
+    integer, optional :: cell_bounds_ndim,length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer axis_id
+    integer l,ierr
+    character(*), optional :: table
+    integer error_code
+    if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    ! ok first check we have length if no coords or bounds
+!!$    if (.not.present(length).and. .not. present(coord_vals) .and. .not. present(cell_bounds)) then
+!!$          msg = "cmor_axis (fortran):: you need to pass length to cmor_axis if no bounds nor coords"//char(0)
+!!$          error_code = CMOR_CRITICAL
+!!$          call cmor_handle_error(msg,error_code)
+!!$    endif
+    
+    if (present(interval)) then
+       interv = trim(interval)//char(0)
+    else
+       interv = char(0)
+    endif
+    
+    if (present(cell_bounds).and. .not. present(coord_vals)) then
+       msg = "cmor_axis (fortran):: you need to pass coords to cmor_axis if you pass bounds"//char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    endif
+    
+    l=0
+    if (.not.present(length)) then
+          l = size(coord_vals)
+    else
+       l= length
+       if (present(coord_vals)) then 
+          if (l.gt.size(coord_vals)) then
+             write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+                  "but the coord_vals array your are sending is only",size(coord_vals),&
+                  "long"//char(0)
+             error_code = CMOR_CRITICAL
+             call cmor_handle_error(msg,error_code)
+          else if (l.lt.size(coord_vals)) then
+             write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+                  "but the coord_vals array your are sending is really",size(coord_vals),&
+                  "long, check you really don't want to use it in its integrality"//char(0)
+             error_code = CMOR_WARNING
+             call cmor_handle_error(msg,error_code)
+          endif
+       endif
+    endif
+
+    if (present(cell_bounds)) then
+       ierr = cmor_axis_cff_double(axis_id,trim(table_entry)//char(0),trim(units)//char(0),&
+            l,coord_vals(1),cell_bounds(1),1,interv)
+    else
+       if (present(coord_vals)) then
+          ierr = cmor_axis_cff_nobnds_double(axis_id,trim(table_entry)//char(0),trim(units)//char(0),l,&
+               coord_vals(1),interv)
+       else
+          ierr = cmor_axis_cff_nocoords(axis_id,trim(table_entry)//char(0),trim(units)//char(0),0,interv)
+       endif
+    endif
+    if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+  end function cmor_axis_double_1
+  function cmor_axis_double_2(table,table_entry,units,length,coord_vals,cell_bounds,&
+       cell_bounds_ndim,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    double precision :: cell_bounds(:,:)
+    double precision :: coord_vals(:)
+    double precision,allocatable :: bnds(:)
+    integer, optional :: cell_bounds_ndim,length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer axis_id
+    integer l,i,ierr,error_code
+    character(*), optional :: table
+    
+    if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    
+    if (present(interval)) then
+       interv = trim(interval)//char(0)
+    else
+       interv = char(0)
+    endif
+    
+    
+    if (.not.present(length)) then
+       l = size(coord_vals)
+    else
+       l= length
+       if (l.gt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is only",size(coord_vals),&
+               "long"//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       else if (l.lt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is really",size(coord_vals),&
+               "long, check you really don't want to use it in its integrality"//char(0)
+          error_code = CMOR_WARNING
+          call cmor_handle_error(msg,error_code)
+       endif
+    endif
+
+    if (size(cell_bounds,1).ne.2) then
+       msg = "cmor_axis (fortran): bounds first dimension length must be 2"//char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    endif
+    allocate(bnds(l*2))
+    do i=1,l
+       bnds(2*i-1) = cell_bounds(1,i)
+       bnds(2*i) = cell_bounds(2,i)
+    enddo
+    ierr = cmor_axis_cff_double(axis_id,trim(table_entry)//char(0),trim(units)//char(0),l,&
+         coord_vals(1),bnds(1),2,interv)
+    deallocate(bnds)
+    if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+  end function cmor_axis_double_2
+  function cmor_axis_real_1(table,table_entry,units,length,coord_vals,cell_bounds,&
+       cell_bounds_ndim,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    real, optional :: cell_bounds(:)
+    real :: coord_vals(:)
+    integer, optional :: cell_bounds_ndim,length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer axis_id
+    integer l,ierr,error_code
+    character(*), optional :: table
+    if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    
+    if (present(interval)) then
+       interv = trim(interval)//char(0)
+    else
+       interv = char(0)
+    endif
+        
+    if (.not.present(length)) then
+       l = size(coord_vals)
+    else
+       l= length
+       if (l.gt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is only",size(coord_vals),&
+               "long"//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       else if (l.lt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is really",size(coord_vals),&
+               "long, check you really don't want to use it in its integrality"//char(0)
+          error_code = CMOR_WARNING
+          call cmor_handle_error(msg,error_code)
+       endif
+    endif
+
+    if (present(cell_bounds)) then
+       ierr = cmor_axis_cff_real(axis_id,trim(table_entry)//char(0),trim(units)//char(0),l,&
+            coord_vals(1),cell_bounds(1),1,interv)
+    else
+       ierr = cmor_axis_cff_nobnds_real(axis_id,trim(table_entry)//char(0),trim(units)//char(0),&
+            l,coord_vals(1),interv)
+    endif
+     if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+ end function cmor_axis_real_1
+  function cmor_axis_real_2(table,table_entry,units,length,coord_vals,cell_bounds,&
+       cell_bounds_ndim,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    real :: cell_bounds(:,:)
+    real :: coord_vals(:)
+    real, allocatable :: bnds(:)
+    integer, optional :: cell_bounds_ndim,length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer axis_id
+    integer l,ierr,i,error_code
+    character(*), optional :: table
+    
+   if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    
+    if (present(interval)) then
+       interv = trim(interval)//char(0)
+    else
+       interv = char(0)
+    endif
+    
+    
+    if (.not.present(length)) then
+       l = size(coord_vals)
+    else
+       l= length
+       if (l.gt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is only",size(coord_vals),&
+               "long"//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       else if (l.lt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is really",size(coord_vals),&
+               "long, check you really don't want to use it in its integrality"//char(0)
+          error_code = CMOR_WARNING
+          call cmor_handle_error(msg,error_code)
+       endif
+    endif
+
+    if (size(cell_bounds,1).ne.2) then
+       msg = "cmor_axis (fortran): bounds first dimension length must be 2"//char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+   endif
+    allocate(bnds(l*2))
+    do i=1,l
+       bnds(2*i-1) = cell_bounds(1,i)
+       bnds(2*i) = cell_bounds(2,i)
+    enddo
+    ierr = cmor_axis_cff_real(axis_id,trim(table_entry)//char(0),trim(units)//char(0),&
+         l,coord_vals(1),bnds(1),2,interv)
+    deallocate(bnds)
+    if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+  end function cmor_axis_real_2
+  function cmor_axis_int_1(table,table_entry,units,length,coord_vals,cell_bounds,&
+       cell_bounds_ndim,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    integer, optional :: cell_bounds(:)
+    integer :: coord_vals(:)
+    integer, optional :: cell_bounds_ndim,length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer axis_id
+    integer l,ierr,error_code
+    character(*), optional :: table
+    
+    if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    
+    if (present(interval)) then
+       interv = trim(interval)//char(0)
+    else
+       interv = char(0)
+    endif
+    
+    
+    if (.not.present(length)) then
+       l = size(coord_vals)
+    else
+       l= length
+       if (l.gt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is only",size(coord_vals),&
+               "long"//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       else if (l.lt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is really",size(coord_vals),&
+               "long, check you really don't want to use it in its integrality"//char(0)
+          error_code = CMOR_WARNING
+          call cmor_handle_error(msg,error_code)
+       endif
+    endif
+
+    if (present(cell_bounds)) then
+       ierr = cmor_axis_cff_int(axis_id,table_entry//char(0),trim(units)//char(0),&
+            l,coord_vals(1),cell_bounds(1),1,interv)
+    else
+          ierr = cmor_axis_cff_nobnds_int(axis_id,table_entry//char(0),trim(units)//char(0),&
+               l,coord_vals(1),interv)
+    endif
+    if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+  end function cmor_axis_int_1
+  function cmor_axis_int_2(table,table_entry,units,length,coord_vals,cell_bounds,&
+       cell_bounds_ndim,interval) result(ierr)
+    implicit none
+    character(*) table_entry,units
+    integer :: cell_bounds(:,:)
+    integer :: coord_vals(:)
+    integer,allocatable :: bnds(:)
+    integer, optional :: cell_bounds_ndim,length
+    character(*) , optional :: interval
+    character(1024) interv,msg
+    integer axis_id
+    integer l,ierr,i,error_code
+    character(*), optional :: table
+
+    if (present(table)) then
+       l = cmor_load_table(table)
+    endif
+    
+    if (present(interval)) then
+       interv = interval//char(0)
+    else
+       interv = char(0)
+    endif
+    
+    
+    if (.not.present(length)) then
+       l = size(coord_vals)
+    else
+       l= length
+       if (l.gt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is only",size(coord_vals),&
+               "long"//char(0)
+          error_code = CMOR_CRITICAL
+          call cmor_handle_error(msg,error_code)
+       else if (l.lt.size(coord_vals)) then
+          write(msg,*) "cmor_axis (fortran):: you passed legnth=",length,&
+               "but the coord_vals array your are sending is really",size(coord_vals),&
+               "long, check you really don't want to use it in its integrality"//char(0)
+          error_code = CMOR_WARNING
+          call cmor_handle_error(msg,error_code)
+       endif
+    endif
+
+    if (size(cell_bounds,1).ne.2) then
+       msg = "cmor_axis (fortran): bounds first dimension lengthmust be 2"//char(0)
+       error_code = CMOR_CRITICAL
+       call cmor_handle_error(msg,error_code)
+    endif
+    allocate(bnds(l*2))
+    do i=1,l
+       bnds(2*i-1) = cell_bounds(1,i)
+       bnds(2*i) = cell_bounds(2,i)
+    enddo
+    ierr = cmor_axis_cff_int(axis_id,table_entry//char(0),trim(units)//char(0),l,&
+         coord_vals(1),bnds(1),2,interv)
+    deallocate(bnds)
+    if (ierr.eq.0) then 
+       ierr = axis_id
+    else 
+       ierr = -ierr
+    endif
+ end function cmor_axis_int_2
+!!$  function cmor_axis_long_1(table,table_entry,units,length,coord_vals,cell_bounds,&
+!!$       cell_bounds_ndim,interval) result(ierr)
+!!$    implicit none
+!!$    character(*) table_entry,units
+!!$    integer (kind=8), optional :: cell_bounds(:)
+!!$    integer (kind=8) :: coord_vals(:)
+!!$    integer, optional :: cell_bounds_ndim,length
+!!$    character(*) , optional :: interval
+!!$    character(1024) interv
+!!$    integer axis_id
+!!$    integer l,ierr
+!!$    character(*), optional :: table
+!!$    
+!!$  if (present(table)) then
+!!$       l = cmor_load_table(table)
+!!$    endif
+!!$    
+!!$    if (present(interval)) then
+!!$       interv = interval//char(0)
+!!$    else
+!!$       interv = char(0)
+!!$    endif
+!!$    
+!!$    
+!!$    if (.not.present(length)) then
+!!$       l = size(coord_vals)
+!!$    else
+!!$       l= length
+!!$    endif
+!!$
+!!$    if (present(cell_bounds)) then
+!!$       ierr = cmor_axis_cff_long(axis_id,table_entry//char(0),units//char(0),&
+!!$            l,coord_vals(1),cell_bounds(1),1,interv)
+!!$    else
+!!$          ierr = cmor_axis_cff_nobnds_long(axis_id=axis_id,&
+!!$               table_entry=table_entry//char(0),&
+!!$               units=units//char(0),&
+!!$               length=l,coord_vals=coord_vals(1),interval=interv)
+!!$    endif
+!!$    if (ierr.eq.0) then 
+!!$       ierr = axis_id
+!!$    else 
+!!$       ierr = -ierr
+!!$    endif
+!!$  end function cmor_axis_long_1
+!!$  function cmor_axis_long_2(table,table_entry,units,length,coord_vals,cell_bounds,&
+!!$       cell_bounds_ndim,interval) result(ierr)
+!!$    implicit none
+!!$    character(*) table_entry,units
+!!$    integer(kind=8)  :: coord_vals(:),cell_bounds(:,:)
+!!$    integer(kind=8),allocatable :: bnds(:)
+!!$    integer , optional :: cell_bounds_ndim,length
+!!$    character(*) , optional :: interval
+!!$    character(1024) interv,msg
+!!$    integer axis_id
+!!$    integer l,ierr,i,error_code
+!!$    character(*), optional :: table
+!!$    character(10) type
+!!$
+!!$    if (present(table)) then
+!!$       l = cmor_load_table(table)
+!!$    endif
+!!$    
+!!$    if (present(interval)) then
+!!$       interv = interval//char(0)
+!!$    else
+!!$       interv = char(0)
+!!$    endif
+!!$    
+!!$    
+!!$    if (.not.present(length)) then
+!!$       l = size(coord_vals)
+!!$    else
+!!$       l= length
+!!$    endif
+!!$
+!!$    if (size(cell_bounds,1).ne.2) then
+!!$       msg = "cmor_axis (fortran): bounds first dimension lengthmust be 2"//char(0)
+!!$       error_code = CMOR_CRITICAL
+!!$       call cmor_handle_error(msg,error_code)
+!!$    endif
+!!$    allocate(bnds(l*2))
+!!$    do i=1,l
+!!$       bnds(2*i-1) = cell_bounds(1,i)
+!!$       bnds(2*i) = cell_bounds(2,i)
+!!$    enddo
+!!$    ierr = cmor_axis_cff_long(axis_id=axis_id,&
+!!$         table_entry=table_entry//char(0),units=units//char(0),length=l,&
+!!$         coord_vals=coord_vals(1),cell_bounds=bnds(1),&
+!!$         cell_bounds_ndim=2,interval=interv)
+!!$    deallocate(bnds)
+!!$    ierr = -ierr
+!!$  end function cmor_axis_long_2
+     
+
+  subroutine cmor_create_output_path(var_id, path)
+    implicit none
+    character(*), intent(out) :: path
+    integer var_id
+    integer slen
+    call cmor_create_output_path_cff(var_id,path,slen)
+    path = path(1:slen)
+  end subroutine cmor_create_output_path
+
+  function cmor_has_cur_dataset_attribute(value) result (ierr)
+    implicit none
+    character (*), intent (in) :: value
+    integer ierr
+    ierr = cmor_has_cur_dset_attribute_cff(trim(value)//char(0))
+  end function cmor_has_cur_dataset_attribute
+
+  function cmor_get_cur_dataset_attribute(name, value) result (ierr)
+    implicit none
+    character (*), intent (in) :: name
+    character (*), intent (out) :: value
+    integer ierr
+    ierr = cmor_get_cur_dset_attribute_cff(trim(name)//char(0), value)
+  end function cmor_get_cur_dataset_attribute
+
+  function cmor_set_cur_dataset_attribute(name, value) result (ierr)
+    implicit none
+    character (*), intent (in) :: name
+    character (*), intent (in) :: value
+    integer ierr
+    ierr = cmor_set_cur_dset_attribute_cff(trim(name)//char(0), trim(value)//char(0))
+  end function cmor_set_cur_dataset_attribute
+
+  function cmor_setup_ints(inpath,netcdf_file_action, set_verbosity,&
+       exit_control, logfile, create_subdirectories) result(ierr)
+    implicit none
+    integer ierr,nc,verb,mode,crsub
+    integer , optional, intent(in) :: netcdf_file_action
+    integer , optional, intent(in) :: set_verbosity
+    integer , optional, intent(in) :: exit_control
+    character(*) , optional, intent(in) :: inpath
+    character(*) , optional, intent(in) :: logfile
+    integer , optional, intent(in) :: create_subdirectories
+    character(1024) path
+
+
+    if (present(inpath)) then
+       path = inpath
+    else
+       path = "."
+    endif
+    if (present(netcdf_file_action)) then
+       nc = netcdf_file_action
+    else
+       nc = CMOR_PRESERVE
+    endif
+    if(present(set_verbosity)) then
+       verb = set_verbosity
+    else
+       verb = CMOR_NORMAL
+    endif
+    if (present(exit_control)) then
+       mode =exit_control
+    else
+       mode = CMOR_NORMAL
+    endif
+    ! correction code to comply with Karl's old calls
+    if (verb.eq.0 ) then 
+       verb = CMOR_QUIET
+    else if (verb.eq.1) then 
+       verb = CMOR_NORMAL
+    endif
+    if (mode.eq.0) then 
+       mode = CMOR_EXIT_ON_MAJOR
+    else if (mode.eq.1 ) then 
+       mode = CMOR_NORMAL
+    else if (mode.eq.2) then 
+       mode = CMOR_EXIT_ON_WARNING
+    endif
+    if (present(create_subdirectories)) then
+       crsub = create_subdirectories
+    else
+       crsub = 1
+    endif
+    if (present(logfile)) then 
+       ierr = -cmor_setup_cff(trim(path)//char(0),nc,verb,mode,trim(logfile)//char(0),crsub)
+    else
+       ierr = -cmor_setup_cff_nolog(trim(path)//char(0),nc,verb,mode,crsub)
+    endif
+       
+  end function cmor_setup_ints
+
+  FUNCTION similar(str1, str2)
+
+    ! compares two strings after removing leading and trailing blanks and 
+    ! ignoring case.  
+
+    IMPLICIT NONE
+
+    LOGICAL :: similar
+    CHARACTER(len=*), INTENT(IN) :: str1
+    CHARACTER(len=*), INTENT(IN) :: str2
+
+    CHARACTER(len=LEN(str1)) :: low1
+    CHARACTER(len=LEN(str2)) :: low2
+    INTEGER :: len1, i
+
+    low1 = ADJUSTL(str1)
+    low2 = ADJUSTL(str2)
+
+    len1 = LEN_TRIM(low1)
+    similar = .TRUE.
+    IF (len1 /= LEN_TRIM(low2)) THEN
+       similar = .FALSE.
+    ELSE
+       ! convert strings to lower case
+       DO i=1,len1
+          IF ( LGE(low1(i:i),'A') .AND. LLE(low1(i:i),'Z') ) &
+               low1(i:i) = ACHAR( IACHAR(low1(i:i)) + 32 )
+          IF ( LGE(low2(i:i),'A') .AND. LLE(low2(i:i),'Z') ) &
+               low2(i:i) = ACHAR( IACHAR(low2(i:i)) + 32 )
+       END DO
+
+       IF (TRIM(low1) /= TRIM(low2)) similar=.FALSE.
+    END IF
+
+    RETURN
+  END FUNCTION similar
+
+
+  function cmor_setup_nc_char(inpath,netcdf_file_action, set_verbosity,&
+       exit_control, logfile, create_subdirectories) result(ierr)
+    implicit none
+    integer ierr,nc,verb,mode,crsub
+    integer , optional, intent(in) :: set_verbosity
+    integer , optional, intent(in) :: exit_control
+    character(*), optional, intent(in) ::  inpath
+    character(*) , intent(in) :: netcdf_file_action
+    character(*) , optional, intent(in) :: logfile
+    integer , optional, intent(in) :: create_subdirectories
+    character(1024) path
+
+    if (present(inpath)) then
+       path = trim(inpath)//char(0)
+    else
+       path = "."
+    endif
+    if (similar(netcdf_file_action,"preserve") ) then
+       nc = CMOR_PRESERVE
+    else if (similar(netcdf_file_action,"append") ) then
+       nc = CMOR_APPEND
+    else if (similar(netcdf_file_action,"replace") ) then
+       nc = CMOR_REPLACE
+    else if (similar(netcdf_file_action,"preserve_3") ) then
+       nc = CMOR_PRESERVE_3
+    else if (similar(netcdf_file_action,"append_3") ) then
+       nc = CMOR_APPEND_3
+    else if (similar(netcdf_file_action,"replace_3") ) then
+       nc = CMOR_REPLACE_3
+    else !dummy value to generate error from C
+       nc =1000
+    endif
+
+    if (present(create_subdirectories)) then
+       crsub = create_subdirectories
+    else
+       crsub = 1
+    endif
+
+    if(present(set_verbosity)) then
+       verb = set_verbosity
+    else
+       verb = CMOR_NORMAL
+    endif
+    if (present(exit_control)) then
+       mode =exit_control
+    else
+       mode = CMOR_NORMAL
+    endif
+    ! correction code to comply withh Karl's old calls
+    if (verb.eq.0 ) then 
+       verb = CMOR_QUIET
+    else if (verb.eq.1) then 
+       verb = CMOR_NORMAL
+    endif
+    if (mode.eq.0) then 
+       mode =CMOR_EXIT_ON_MAJOR
+    else if (mode.eq.1 ) then
+       mode = CMOR_NORMAL
+    else if (mode.eq.2) then
+       mode = CMOR_EXIT_ON_WARNING
+    endif
+    if (present(logfile)) then 
+       ierr = -cmor_setup_cff(trim(path)//char(0),nc,verb,mode,trim(logfile)//char(0),crsub)
+    else
+       ierr = -cmor_setup_cff_nolog(trim(path)//char(0),nc,verb,mode,crsub)
+    endif
+  end function cmor_setup_nc_char
+
+  function cmor_dataset(outpath,experiment_id,institution,source,calendar,&
+       realization,&
+       contact,history,comment,references,&
+       leap_year,leap_month,month_lengths,model_id,forcing, &
+       initialization_method,physics_version,institute_id,parent_experiment_id,branch_time) result (ierr)
+    implicit none
+    character(*), INTENT(in) :: outpath,experiment_id,institution,source,calendar
+    character(*), optional, intent(in) :: model_id,forcing
+    character(*), optional, intent(in) :: contact,history,comment,references,institute_id
+    character(*), optional, intent(in) :: parent_experiment_id
+    integer, optional,intent(in) :: leap_year,leap_month,month_lengths(12)
+    integer r,ly,lm,im,pv
+    integer, optional, intent(in) :: realization,initialization_method,physics_version
+    character(1024) cntct,hist,comt,ref,mnm,fnm,instid,peid
+    integer ierr
+    double precision, optional, intent(in) :: branch_time
+
+    if (present(realization)) then
+       r = realization
+    else
+       r = 1
+    endif
+    if (present(initialization_method)) then
+       im = initialization_method
+    else
+       im = 0
+    endif
+    if (present(physics_version)) then
+       pv = physics_version
+    else
+       pv = 0
+    endif
+    if (present(leap_year)) then
+       ly = leap_year
+    else
+       ly =0
+    endif
+    if (present(leap_month)) then
+       lm = leap_month
+    else
+       lm =0
+    endif
+    if (present(contact)) then
+       cntct = contact//char(0)
+    else
+       cntct = char(0)
+    endif
+    if (present(history)) then
+       hist = history//char(0)
+    else
+       hist = char(0)
+    endif
+    if (present(comment)) then
+       comt = comment//char(0)
+    else
+       comt = char(0)
+    endif
+    if (present(references)) then
+       ref = references//char(0)
+    else
+       ref = char(0)
+    endif
+    if (present(model_id)) then
+       mnm = model_id//char(0)
+    else
+       mnm  = char(0)
+    endif
+    if (present(forcing)) then
+       fnm = forcing//char(0)
+    else
+       fnm  = char(0)
+    endif
+    if (present(institute_id)) then
+       instid = institute_id//char(0)
+    else
+       instid= char(0)
+    endif
+    if (present(parent_experiment_id)) then
+       peid = parent_experiment_id//char(0)
+    else
+       peid= char(0)
+    endif
+    if (present(month_lengths)) then
+       if (present(branch_time)) then
+          ierr = cmor_dataset_cff(outpath//char(0),experiment_id//char(0),&
+               institution//char(0),source//char(0),calendar//char(0),r,&
+               cntct,hist,comt,ref,&
+               ly,lm,month_lengths(1),mnm,fnm,im,pv,instid,peid,branch_time)
+       else
+          ierr = cmor_dataset_cff_nobrch(outpath//char(0),experiment_id//char(0),&
+               institution//char(0),source//char(0),calendar//char(0),r,&
+               cntct,hist,comt,ref,&
+               ly,lm,month_lengths(1),mnm,fnm,im,pv,instid,peid)
+       endif
+    else
+       if (present(branch_time)) then
+          ierr = cmor_dataset_cff_null(outpath//char(0),experiment_id//char(0),&
+               institution//char(0),source//char(0),calendar//char(0),r,&
+               cntct,hist,comt,ref,&
+               ly,lm,mnm,fnm,im,pv,instid,peid,branch_time)
+       else
+          ierr = cmor_dataset_cff_null_nobrch(outpath//char(0),experiment_id//char(0),&
+               institution//char(0),source//char(0),calendar//char(0),r,&
+               cntct,hist,comt,ref,&
+               ly,lm,mnm,fnm,im,pv,instid,peid)
+       endif
+    endif
+    ierr = -ierr
+  end function cmor_dataset
+end module cmor_users_functions
diff --git a/Src/cmor_grids.c b/Src/cmor_grids.c
new file mode 100644
index 0000000..b799ddc
--- /dev/null
+++ b/Src/cmor_grids.c
@@ -0,0 +1,733 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "cmor.h"
+#include <udunits2.h>
+
+/* functions prototyping */
+extern int CMOR_TABLE;
+
+void cmor_init_grid_mapping(cmor_mappings_t *mapping,char *id)
+{
+  int n;
+  cmor_add_traceback("cmor_init_grid_mapping");
+  cmor_is_setup();
+  mapping->nattributes=0;
+  for(n=0;n<CMOR_MAX_GRID_ATTRIBUTES;n++) mapping->attributes_names[n][0]='\0';
+  strcpy(mapping->coordinates,"");
+  strncpy(mapping->id,id,CMOR_MAX_STRING);
+  cmor_pop_traceback();
+  return;
+}
+
+int cmor_copy_data(double **dest1, void *data, char type, int nelts) {
+  int i;
+  char msg[CMOR_MAX_STRING];
+  double *dest;
+
+  cmor_add_traceback("cmor_copy_data");
+  dest = *dest1;
+  /* First free the dest if already allocated */
+  if (dest !=NULL) {
+    free(dest);
+  }
+  /* allocate space */
+  dest = malloc(nelts*sizeof(double));
+  /* and copy elements */
+  for (i=0;i<nelts;i++) {
+    if (type=='f') dest[i] = (double)((float *)data)[i];
+    else if (type=='i') dest[i] = (double)((int *)data)[i];
+    else if (type=='l') dest[i] = (double)((long *)data)[i];
+    else if (type=='d') dest[i] = (double)((double *)data)[i];
+    else {
+      snprintf(msg,CMOR_MAX_STRING,"wrong data type: %c",type);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  *dest1=dest;
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_has_grid_attribute(int gid, char *name) {
+  int i;
+  int grid_id;
+  grid_id=-gid-10;
+  for (i=0;i<cmor_grids[grid_id].nattributes;i++) {
+    if (strcmp(name,cmor_grids[grid_id].attributes_names[i])==0) return 0;
+  }
+  return 1;
+}
+
+int cmor_get_grid_attribute(int gid, char *name, double *value) {
+  int i,j;
+  int grid_id;
+  grid_id=-gid-10;
+  j=-1;
+  for (i=0;i<cmor_grids[grid_id].nattributes;i++) {
+    if (strcmp(name,cmor_grids[grid_id].attributes_names[i])==0) j=i;
+  }
+  if (j!=-1) {
+    *value = cmor_grids[grid_id].attributes_values[j];
+    return 0;
+  }
+  return 1;
+}
+void cmor_convert_value(char *units,char *ctmp,double *tmp){
+  ut_unit *user_units=NULL, *cmor_units=NULL;
+  cv_converter *ut_cmor_converter=NULL;
+  double value;
+  char msg[CMOR_MAX_STRING];
+
+
+  cmor_add_traceback("cmor_convert_value");
+
+  value = *tmp;
+  if (units[0]!='\0') {
+    cmor_prep_units(ctmp,units,&cmor_units,&user_units,&ut_cmor_converter);
+    *tmp = cv_convert_double(ut_cmor_converter,value);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error converting units from %s to %s",units,ctmp);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+
+    cv_free(ut_cmor_converter);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    ut_free(cmor_units);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    ut_free(user_units);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else *tmp=value;
+  cmor_pop_traceback();
+  return;
+}
+
+int cmor_set_grid_attribute(int gid, char *name, double *value, char *units) {
+  int i,j,iatt;
+  int grid_id;
+  char ctmp[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  double tmp;
+
+  cmor_add_traceback("cmor_set_grid_attribute");
+  grid_id=-gid-10;
+  iatt = cmor_grids[grid_id].nattributes;
+  tmp = *value;
+
+  /* locate attribute index */
+  for (i=0;i<cmor_grids[grid_id].nattributes;i++) {
+    if (strcmp(name,cmor_grids[grid_id].attributes_names[i])==0) iatt=i;
+  }
+
+  if (iatt==cmor_grids[grid_id].nattributes) cmor_grids[grid_id].nattributes++;
+
+  /* loop thru attributes */
+  if (strcmp(name,"false_easting")==0) {
+    j=-1;
+    for (i=0;i<cmor_grids[grid_id].ndims;i++) {
+      cmor_get_axis_attribute(cmor_grids[grid_id].axes_ids[i],"standard_name",'c',&ctmp[0]);
+      if (strcmp(ctmp,"projection_x_coordinate")==0) j=i;
+    }
+    if (j==-1) {
+      snprintf(ctmp,CMOR_MAX_STRING,"grid mapping attribute: 'false easting' must be set in conjunction with ut_cmor_a 'projection_x_coordinate' axis, I could not find such an axis on your grid, we will not set this attribute");
+      cmor_handle_error(ctmp,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    cmor_get_axis_attribute(cmor_grids[grid_id].axes_ids[j],"units",'c',&ctmp[0]);
+    cmor_convert_value(units,ctmp,&tmp);
+  }
+  else if (strcmp(name,"false_northing")==0) {
+    j=-1;
+    for (i=0;i<cmor_grids[grid_id].ndims;i++) {
+      cmor_get_axis_attribute(cmor_grids[grid_id].axes_ids[i],"standard_name",'c',&ctmp[0]);
+      if (strcmp(ctmp,"projection_y_coordinate")==0) j=i;
+    }
+    if (j==-1) {
+      snprintf(ctmp,CMOR_MAX_STRING,"grid mapping attribute: 'false easting' must be set in conjunction with a 'projection_x_coordinate' axis, I could not find such an axis on your grid, we will not set this attribute");
+      cmor_handle_error(ctmp,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    cmor_get_axis_attribute(cmor_grids[grid_id].axes_ids[j],"units",'c',&ctmp[0]);
+    cmor_convert_value(units,ctmp,&tmp);
+  }
+  else if (strcmp(name,"grid_north_pole_latitude")==0 || strcmp(name,"latitude_of_projection_origin")==0 || strcmp(name,"standard_parallel")==0 || strcmp(name,"standard_parallel1")==0 || strcmp(name,"standard_parallel2")==0 ) {
+    strcpy(ctmp,"degrees_north");
+    cmor_convert_value(units,ctmp,&tmp);
+    if ((tmp<-90) || (tmp>90.)) {
+      snprintf(msg,CMOR_MAX_STRING,"%s parameter must be between -90 and 90 %s, will not be set",name,ctmp);
+      cmor_handle_error(msg,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+  }
+  else if (strcmp(name,"grid_north_pole_longitude")==0 || strcmp(name,"longitude_of_prime_meridian")==0 || strcmp(name,"longitude_of_central_meridian")==0 || strcmp(name,"longitude_of_projection_origin")==0 || strcmp(name,"north_pole_grid_longitude")==0 || strcmp(name,"straight_vertical_longitude_from_pole")==0) {
+    strcpy(ctmp,"degrees_east");
+    cmor_convert_value(units,ctmp,&tmp);
+    if ((tmp<-180) || (tmp>180.)) {
+      snprintf(msg,CMOR_MAX_STRING,"%s parameter must be between -180 and 180 %s, will not be set",name,ctmp);
+      cmor_handle_error(msg,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+  }
+  else if (strcmp(name,"perspective_point_height")==0 || strcmp(name,"semi_major_axis")==0 || strcmp(name,"semi_minor_axis")==0 ) {
+    strcpy(ctmp,"m");
+    cmor_convert_value(units,ctmp,&tmp);
+  }
+  else if (strcmp(name,"scale_factor_at_central_meridian")==0 || strcmp(name,"scale_factor_at_projection_origin")==0 ) {
+    strcpy(ctmp,"m");
+    cmor_convert_value(units,ctmp,&tmp);
+    if (tmp<0) {
+      snprintf(msg,CMOR_MAX_STRING,"%s parameter must be between positive, will not be set",name);
+      cmor_handle_error(msg,CMOR_NORMAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+  }
+  /*printf("setting: %s to %lf (orig: %lf)\n",name,tmp,value);*/
+  strncpy(cmor_grids[grid_id].attributes_names[iatt],name,CMOR_MAX_STRING);
+  cmor_grids[grid_id].attributes_values[iatt] = tmp;
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_attribute_in_list(char *name, int n, char (*atts)[CMOR_MAX_STRING]) {
+  int i,found=1;
+
+  for (i=0;i<n;i++) {
+    if (strcmp(name,atts[i])==0) found=0;
+  }
+  return found;
+}
+
+int cmor_grid_valid_mapping_attribute_names(char *name, int *natt, char (*att)[CMOR_MAX_STRING],int *ndims, char (*dims)[CMOR_MAX_STRING]){
+  int i,j;
+
+  *natt = -1; /* -1 means mapping name not found */
+  *ndims=0;
+/*   printf("mapping name: %s\n",name); */
+  if (strcmp(name,"albers_conical_equal_area")==0) {
+    *natt = 5;
+    strcpy(att[0],"standard_parallel"); 
+    strcpy(att[1],"longitude_of_central_meridian"); 
+    strcpy(att[2],"latitude_of_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"azimuthal_equidistant")==0) {
+    *natt = 4;
+    strcpy(att[0],"longitude_of_projection_origin");
+    strcpy(att[1],"latitude_of_projection_origin");
+    strcpy(att[2],"false_easting"); 
+    strcpy(att[3],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"lambert_azimuthal_equal_area")==0) {
+    *natt = 4;
+    strcpy(att[0],"longitude_of_projection_origin");
+    strcpy(att[1],"latitude_of_projection_origin");
+    strcpy(att[2],"false_easting"); 
+    strcpy(att[3],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"lambert_conformal_conic")==0) {
+    *natt = 5;
+    strcpy(att[0],"standard_parallel"); 
+    strcpy(att[1],"longitude_of_central_meridian"); 
+    strcpy(att[2],"latitude_of_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"lambert_cylindrical_equal_area")==0) {
+    *natt = 5;
+    strcpy(att[0],"standard_parallel"); 
+    strcpy(att[1],"longitude_of_central_meridian"); 
+    strcpy(att[2],"scale_factor_at_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"latitude_longitude")==0) {
+    *natt=0;
+    *ndims=0;
+  }
+  else if (strcmp(name,"mercator")==0) {
+    *natt = 5;
+    strcpy(att[0],"standard_parallel"); 
+    strcpy(att[1],"longitude_of_projection_origin"); 
+    strcpy(att[2],"scale_factor_at_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"orthographic")==0) {
+    *natt = 4;
+    strcpy(att[0],"longitude_of_projection_origin"); 
+    strcpy(att[1],"latitude_of_projection_origin"); 
+    strcpy(att[2],"scale_factor_at_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_x_coordinate");
+    strcpy(dims[1],"projection_y_coordinate");
+  }
+  else if (strcmp(name,"polar_stereographic")==0) {
+    *natt=6;
+    strcpy(att[0],"straight_vertical_longitude_from_pole"); 
+    strcpy(att[1],"latitude_of_projection_origin");
+    strcpy(att[2],"standard_parallel"); 
+    strcpy(att[3],"scale_factor_at_projection_origin"); 
+    strcpy(att[4],"false_easting"); 
+    strcpy(att[5],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"rotated_latitude_longitude")==0) {
+    *natt=3;
+    strcpy(att[0],"grid_north_pole_latitude"); 
+    strcpy(att[1],"grid_north_pole_longitude"); 
+    strcpy(att[2],"north_pole_grid_longitude"); 
+    *ndims=2;
+    strcpy(dims[0],"grid_latitude");
+    strcpy(dims[1],"grid_longitude");
+  }
+  else if (strcmp(name,"stereographic")==0) {
+    *natt=5;
+    strcpy(att[0],"longitude_of_projection_origin");
+    strcpy(att[1],"latitude_of_projection_origin");
+    strcpy(att[2],"scale_factor_at_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"transverse_mercator")==0) {
+    *natt=5;
+    strcpy(att[0],"scale_factor_at_central_meridian"); 
+    strcpy(att[1],"longitude_of_central_meridian"); 
+    strcpy(att[2],"latitude_of_projection_origin"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+  else if (strcmp(name,"vertical_perspective")==0) {
+    *natt=5;
+    strcpy(att[0],"longitude_of_projection_origin");
+    strcpy(att[1],"latitude_of_projection_origin");
+    strcpy(att[2],"perspective_height_point"); 
+    strcpy(att[3],"false_easting"); 
+    strcpy(att[4],"false_northing"); 
+    *ndims=2;
+    strcpy(dims[0],"projection_y_coordinate");
+    strcpy(dims[1],"projection_x_coordinate");
+  }
+
+  /* Now looks up in table */
+  for (i=0;i<cmor_tables[CMOR_TABLE].nmappings;i++) {
+    if (strcmp(name,cmor_tables[CMOR_TABLE].mappings[i].id)==0) { /* ok that is the mapping */
+      *natt = cmor_tables[CMOR_TABLE].mappings[i].nattributes;
+      for (j=0;j<cmor_tables[CMOR_TABLE].mappings[i].nattributes;j++) {
+	strcpy(att[j],cmor_tables[CMOR_TABLE].mappings[i].attributes_names[j]);
+      }
+    }
+  }
+
+  if (*natt!=-1) {
+    strcpy(att[*natt+0],"earth_radius");
+    strcpy(att[*natt+1],"inverse_flattening");
+    strcpy(att[*natt+2],"longitude_of_prime_meridian");
+    strcpy(att[*natt+3],"perspective_point_height");
+    strcpy(att[*natt+4],"semi_major_axis");
+    strcpy(att[*natt+5],"semi_minor_axis");
+    *natt = *natt+6;
+  }
+  return 0;
+}
+
+void cmor_set_mapping_attribute(cmor_mappings_t *mapping,char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] )
+{
+  int i,n;
+  char msg[CMOR_MAX_STRING];
+
+  cmor_add_traceback("cmor_set_mapping_attribute");
+  if (strcmp(att,"coordinates")==0) {
+    strncpy(mapping->coordinates,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"parameter")==0) {
+    n=-1;
+    for (i=0;i<mapping->nattributes;i++) {
+      if (strcmp(mapping->attributes_names[i],val)==0) {
+	n=i;
+	break;
+      }
+    }
+    if (n==-1) {
+      n = mapping->nattributes;
+      mapping->nattributes++;
+    }
+    strncpy(mapping->attributes_names[n],val,CMOR_MAX_STRING);
+  }
+  else {
+    snprintf(msg,CMOR_MAX_STRING,"Unknown attribute: '%s' for mapping '%s' (value was: '%s')",att,mapping->id,val);
+    cmor_handle_error(msg,CMOR_WARNING);
+  }
+  cmor_pop_traceback();
+}
+
+int cmor_set_grid_mapping(int gid, char *name, int nparam, char **attributes_names, int lparams, double attributes_values[CMOR_MAX_GRID_ATTRIBUTES], char **units, int lnunits ){
+  int grid_id, nattributes,ndims;
+  int i,j,k,l;
+  char *achar,*bchar;
+  char lattributes_names[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  char lunits[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  char grid_attributes[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  char grid_dimensions[CMOR_MAX_DIMENSIONS][CMOR_MAX_STRING];
+
+  cmor_add_traceback("cmor_set_grid_mapping");
+  if (nparam>=CMOR_MAX_GRID_ATTRIBUTES) {
+    snprintf(msg,CMOR_MAX_STRING,"CMOR allows only %i grid parameters too be defined , you are trying to define %i parameters, if you really need that many recompile cmor changing the value of parameter: CMOR_MAX_GRID_ATTRIBUTES",CMOR_MAX_GRID_ATTRIBUTES,nparam);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  achar = (char *)attributes_names;
+  bchar = (char *)units;
+  for(i=0;i<nparam;i++) {
+    strncpy(lattributes_names[i],achar,CMOR_MAX_STRING);
+    strncpy(lunits[i],bchar,CMOR_MAX_STRING);
+    achar += lparams;
+    bchar += lnunits;
+  }
+/*   for(i=0;i<nparam;i++) printf("ok paramter: %i is: %s, with value %lf and units '%s'\n",i,lattributes_names[i],attributes_values[i],lunits[i]); */
+  grid_id =  -gid-10;
+
+  /* reads in grid definitions */
+  cmor_grid_valid_mapping_attribute_names(name, &nattributes, grid_attributes,&ndims,grid_dimensions);
+
+/*   printf("coming back we haver set %i atts\n",nattributes); */
+/*   for (i=0;i<nattributes;i++) {printf("%i, %s, %s, %s\n",i,grid_attributes[i],grid_dimensions[0],grid_dimensions[1]);} */
+
+  if (ndims!=cmor_grids[grid_id].ndims) {
+    snprintf(msg,CMOR_MAX_STRING,"you defined your grid with %i axes but grid_mapping '%s' requires exactly %i axes",cmor_grids[grid_id].ndims,name,ndims);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  /* first of all depending on some grid names we need to make sure we have the right axes set in the right order */
+  k=0;
+  for(i=0;i<ndims;i++){
+    for(j=0;j<cmor_grids[grid_id].ndims;j++) {
+      cmor_get_axis_attribute(cmor_grids[grid_id].original_axes_ids[j],"standard_name",'c',&msg);
+      if (strcmp(grid_dimensions[i],msg)==0) {
+	cmor_grids[grid_id].axes_ids[i]=cmor_grids[grid_id].original_axes_ids[j];
+	/* Now we probably need to alter the lat/lon,etc.. associated variables as well ! */
+	for (l=0;l<4;l++) {
+	  if (cmor_vars[cmor_grids[cmor_ngrids].associated_variables[l]].ndims!=0) {
+	    cmor_vars[cmor_grids[cmor_ngrids].associated_variables[l]].axes_ids[i]=cmor_grids[grid_id].original_axes_ids[j];
+	  }
+	}
+	k++;
+      }
+    }
+  }
+
+
+  if (k!=ndims) {
+    snprintf(msg,CMOR_MAX_STRING,"setting grid mapping to '%s' we could not find all the required axes, required axes are:",name);
+    for (i=0;i<ndims;i++) {snprintf(msg2,CMOR_MAX_STRING," %s",grid_dimensions[i]);strncat(msg,msg2,CMOR_MAX_STRING-strlen(msg) );}
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+
+  
+  for (i=0;i<nparam;i++) {
+    if (cmor_attribute_in_list(lattributes_names[i],nattributes, &grid_attributes[0])==1) {
+      if ((strcmp(lattributes_names[i],"standard_parallel1")==0 || strcmp(lattributes_names[i],"standard_parallel2")==0) && ( strcmp(name,"lambert_conformal_conic")==0)) {/* ok do nothing it is just that we need 2 values for this parameter */
+	cmor_set_grid_attribute(gid,lattributes_names[i],&attributes_values[i],lunits[i]);
+     }
+      else {
+	snprintf(msg,CMOR_MAX_STRING,"in grid_mapping, attribute '%s' (with value: %lf) is not a known attribute for grid mapping: '%s'",lattributes_names[i],attributes_values[i],name);
+	cmor_handle_error(msg,CMOR_WARNING);
+      }
+    }
+    else {
+      cmor_set_grid_attribute(gid,lattributes_names[i],&attributes_values[i],lunits[i]);
+    }
+  }
+  /* checks all paramter (but last 6 which are optional) have been set */
+  for (i=0;i<nattributes-6;i++) {
+    if (cmor_has_grid_attribute(gid,grid_attributes[i])==1) {
+      snprintf(msg,CMOR_MAX_STRING,"Grid mapping attribute %s has not been set, you should consider setting it",grid_attributes[i]);
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+  }
+  /* ok finally we need to copy the name to the grid struct */
+  strncpy(cmor_grids[grid_id].mapping,name,CMOR_MAX_STRING);
+  cmor_pop_traceback();
+  return 0;
+}
+
+
+int cmor_time_varying_grid_coordinate(int *coord_grid_id, int  grid_id, char *table_entry, char *units, char type, void *missing, int *coordinate_type) {
+  int ierr=0,j;
+  int axes[2];
+  char msg[CMOR_MAX_STRING];
+  int ctype=-1;
+  double *dummy_values;
+  int nvertices=cmor_grids[-grid_id-10].nvertices;
+
+  axes[0]=grid_id;
+
+  cmor_add_traceback("cmor_time_varying_grid_coordinate");
+  cmor_is_setup();
+
+  strcpy(msg,"not found");
+  if (coordinate_type == NULL) {
+    for (j=0;j<cmor_tables[cmor_axes[cmor_grids[-grid_id-10].axes_ids[0]].ref_table_id].nvars;j++) {
+      if (strcmp(cmor_tables[cmor_axes[cmor_grids[-grid_id-10].axes_ids[0]].ref_table_id].vars[j].id,table_entry)==0) {
+	strncpy(msg,cmor_tables[cmor_axes[cmor_grids[-grid_id-10].axes_ids[0]].ref_table_id].vars[j].standard_name,CMOR_MAX_STRING);
+	break;
+      }
+    }
+    if (strcmp(msg,"latitude")==0) ctype = 0;
+    if (strcmp(msg,"longitude")==0) ctype = 1;
+    if (strcmp(msg,"vertices_latitude")==0) ctype = 2;
+    if (strcmp(msg,"vertices_longitude")==0) ctype = 3;
+  }
+  else {
+    ctype = *coordinate_type;
+  }
+  switch (ctype) {
+  case (0) :
+    ierr = cmor_variable(coord_grid_id,table_entry,units,1,axes,type,missing,NULL,NULL,NULL,NULL,NULL);
+    cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[0] = *coord_grid_id;
+    /* ??? additional attributes to add to this variable ? */
+    break;
+  case (1) :
+    ierr = cmor_variable(coord_grid_id,table_entry,units,1,axes,type,missing,NULL,NULL,NULL,NULL,NULL);
+    cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[1] = *coord_grid_id;
+    /* ??? additional attributes to add to this variable ? */
+    break;
+  case (2) :
+    if (nvertices == 0 ) {
+      sprintf(msg,"your definnig a vertices dependent variable (%s) associated wth grid %i, but you declared this grid as having 0 vertices",table_entry,grid_id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[3] == -1) {
+      dummy_values=malloc(sizeof(double)*nvertices);
+      for (j=0;j<nvertices;j++) dummy_values[j]=(double)j;
+      cmor_axis(&axes[1],"vertices","1",nvertices,dummy_values,'d',NULL,0,NULL);
+      free(dummy_values);
+      cmor_grids[-grid_id-10].nvertices = axes[1];
+    }
+    else {
+      axes[1] = cmor_grids[-grid_id-10].nvertices;
+    }
+    ierr = cmor_variable(coord_grid_id,table_entry,units,2,axes,type,missing,NULL,NULL,NULL,NULL,NULL);
+    cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[2] = *coord_grid_id;
+    /* adds the bounds attribute */
+    if (cmor_has_variable_attribute(cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[0],"bounds")==0) {
+      cmor_get_variable_attribute(cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[0],"bounds",&msg);
+      strncat(msg," ",CMOR_MAX_STRING-strlen(msg) );
+      strncat(msg,cmor_vars[*coord_grid_id].id,CMOR_MAX_STRING-strlen(msg) );
+    }
+    else {
+      strncpy(msg,cmor_vars[*coord_grid_id].id,CMOR_MAX_STRING);
+    }
+    cmor_set_variable_attribute(cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[0],"bounds",'c',msg);
+    break;
+  case (3) :
+    if (nvertices == 0 ) {
+      sprintf(msg,"your definnig a vertices dependent variable (%s) associated wth grid %i, but you declared this grid as having 0 vertices",table_entry,grid_id);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[2] == -1) {
+      dummy_values=malloc(sizeof(double)*nvertices);
+      for (j=0;j<nvertices;j++) dummy_values[j]=(double)j;
+      cmor_axis(&axes[1],"vertices","1",nvertices,dummy_values,'d',NULL,0,NULL);
+      free(dummy_values);
+      cmor_grids[-grid_id-10].nvertices = axes[1];
+    }
+    else {
+      axes[1] = cmor_grids[-grid_id-10].nvertices;
+    }
+    ierr = cmor_variable(coord_grid_id,table_entry,units,2,axes,type,missing,NULL,NULL,NULL,NULL,NULL);
+    cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[3] = *coord_grid_id;
+    /* adds the bounds attribute */
+    if (cmor_has_variable_attribute(cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[1],"bounds")==0) {
+      cmor_get_variable_attribute(cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[1],"bounds",&msg);
+      strncat(msg," ",CMOR_MAX_STRING-strlen(msg) );
+      strncat(msg,cmor_vars[*coord_grid_id].id,CMOR_MAX_STRING-strlen(msg) );
+    }
+    else {
+      strncpy(msg,cmor_vars[*coord_grid_id].id,CMOR_MAX_STRING);
+    }
+    cmor_set_variable_attribute(cmor_grids[cmor_vars[*coord_grid_id].grid_id].associated_variables[1],"bounds",'c',msg);
+    break;
+  default:
+    sprintf(msg,"unknown coord type: %i",ctype);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+    break;
+  }
+  cmor_vars[*coord_grid_id].needsinit=0;
+
+  cmor_pop_traceback();
+  return ierr;
+}
+
+int cmor_grid(int *grid_id, int ndims, int *axes_ids, char type, void *lat, void *lon, int nvertices, void *blat, void *blon) {
+  int i,j,n,did_vertices=0;
+  char msg[CMOR_MAX_STRING];
+  int axes[2];
+  double *dummy_values;
+
+  cmor_add_traceback("cmor_grid");
+  if ((axes_ids==NULL) || (ndims==0)) {
+    snprintf(msg,CMOR_MAX_STRING,"You need to define the grid axes first");
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  cmor_ngrids+=1;
+  if (cmor_ngrids>=CMOR_MAX_GRIDS) {
+    snprintf(msg,CMOR_MAX_STRING,"Too many grids defined, maximum possible grids is currently set to %i", CMOR_MAX_GRIDS);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  n=1;
+  for (i=0;i<ndims;i++) {
+    if (axes_ids[i]>cmor_naxes) {
+      snprintf(msg,CMOR_MAX_STRING,"Defining grid, Axis %i not defined yet",axes_ids[i]);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (cmor_tables[cmor_axes[axes_ids[i]].ref_table_id].axes[cmor_axes[axes_ids[i]].ref_axis_id].axis=='T') {
+      cmor_grids[cmor_ngrids].istimevarying = 1;
+/*       snprintf(msg,CMOR_MAX_STRING,"defining grid: axis: %s is time axis, grids are not allowed to be time-varying at the moment",cmor_axes[axes_ids[i]].id); */
+/*       cmor_handle_error(msg,CMOR_CRITICAL); */
+    }
+    cmor_grids[cmor_ngrids].original_axes_ids[i]=axes_ids[i];
+    cmor_grids[cmor_ngrids].axes_ids[i]=axes_ids[i];
+    cmor_axes[axes_ids[i]].isgridaxis=1;
+    n*=cmor_axes[axes_ids[i]].length;
+  }
+  cmor_grids[cmor_ngrids].ndims = ndims;
+  cmor_grids[cmor_ngrids].nvertices = nvertices;
+  if (lat==NULL) {
+    if (cmor_grids[cmor_ngrids].istimevarying != 1) {
+      snprintf(msg,CMOR_MAX_STRING,"you need to pass the latitude values when defining a grid");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else {
+    axes[0]=-cmor_ngrids-10;
+    if (cmor_grids[cmor_ngrids].istimevarying != 1) {
+      cmor_copy_data(&cmor_grids[cmor_ngrids].lats,lat,type,n);
+      cmor_variable(&cmor_grids[cmor_ngrids].associated_variables[0],"latitude","degrees_north",1,&axes[0],'d',NULL,NULL,NULL,NULL,NULL,NULL);
+      cmor_vars[cmor_grids[cmor_ngrids].associated_variables[0]].needsinit=0;
+      /*     for (i=0;i<5;i++) { */
+      /*       printf("%i:  %lf\n",i,cmor_grids[cmor_ngrids].lats[i]); */
+      /*     } */
+    }
+  }
+  if (lon==NULL) {
+    if (cmor_grids[cmor_ngrids].istimevarying != 1) {
+      snprintf(msg,CMOR_MAX_STRING,"you need to pass the longitude values when defining a grid");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else {
+    cmor_copy_data(&cmor_grids[cmor_ngrids].lons,lon,type,n);
+    axes[0]=-cmor_ngrids-10;
+    /*     for (i=0;i<5;i++) printf("%i:  %lf\n",i,cmor_grids[cmor_ngrids].lons[i]); */
+    cmor_variable(&cmor_grids[cmor_ngrids].associated_variables[1],"longitude","degrees_east",1,&axes[0],'d',NULL,NULL,NULL,NULL,NULL,NULL);
+    cmor_vars[cmor_grids[cmor_ngrids].associated_variables[1]].needsinit=0;
+  }
+  if (blat==NULL) {
+    if (cmor_grids[cmor_ngrids].istimevarying != 1) {
+      snprintf(msg,CMOR_MAX_STRING,"it is recommended you pass the latitude bounds values when defining a grid");
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+  }
+  else {
+    cmor_copy_data(&cmor_grids[cmor_ngrids].blats,blat,type,n*nvertices);
+    dummy_values=malloc(sizeof(double)*nvertices);
+    for (j=0;j<nvertices;j++) dummy_values[j]=(double)j;
+    cmor_axis(&axes[1],"vertices","1",nvertices,dummy_values,'d',NULL,0,NULL);
+    free(dummy_values);
+    did_vertices=1;
+    cmor_variable(&cmor_grids[cmor_ngrids].associated_variables[2],"vertices_latitude","degrees_north",2,&axes[0],'d',NULL,NULL,NULL,NULL,NULL,NULL);
+    cmor_vars[cmor_grids[cmor_ngrids].associated_variables[2]].needsinit=0;
+    if (cmor_has_variable_attribute(cmor_grids[cmor_ngrids].associated_variables[0],"bounds")==0) {
+      cmor_get_variable_attribute(cmor_grids[cmor_ngrids].associated_variables[0],"bounds",&msg);
+      strncat(msg," ",CMOR_MAX_STRING-strlen(msg) );
+      strncat(msg,cmor_vars[cmor_grids[cmor_ngrids].associated_variables[2]].id,CMOR_MAX_STRING-strlen(msg) );
+    }
+    else {
+      strncpy(msg,cmor_vars[cmor_grids[cmor_ngrids].associated_variables[2]].id,CMOR_MAX_STRING);
+    }
+    cmor_set_variable_attribute(cmor_grids[cmor_ngrids].associated_variables[0],"bounds",'c',msg);
+  }
+  if (blon==NULL) {
+    if (cmor_grids[cmor_ngrids].istimevarying != 1) {
+      snprintf(msg,CMOR_MAX_STRING,"it is recommended you pass the longitude bounds values when defining a grid");
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+  }
+  else {
+    cmor_copy_data(&cmor_grids[cmor_ngrids].blons,blon,type,n*nvertices);
+    if (did_vertices == 0 ) {
+      dummy_values=malloc(sizeof(double)*nvertices);
+      for (j=0;j<nvertices;j++) dummy_values[j]=(double)j;
+      cmor_axis(&axes[1],"vertices","1",nvertices,dummy_values,'d',NULL,0,NULL);
+      free(dummy_values);
+    }
+    cmor_variable(&cmor_grids[cmor_ngrids].associated_variables[3],"vertices_longitude","degrees_east",2,&axes[0],'d',NULL,NULL,NULL,NULL,NULL,NULL);
+    cmor_vars[cmor_grids[cmor_ngrids].associated_variables[3]].needsinit=0;
+    if (cmor_has_variable_attribute(cmor_grids[cmor_ngrids].associated_variables[1],"bounds")==0) {
+      cmor_get_variable_attribute(cmor_grids[cmor_ngrids].associated_variables[1],"bounds",&msg);
+      strncat(msg," ",CMOR_MAX_STRING-strlen(msg) );
+      strncat(msg,cmor_vars[cmor_grids[cmor_ngrids].associated_variables[3]].id,CMOR_MAX_STRING-strlen(msg) );
+    }
+    else {
+      strncpy(msg,cmor_vars[cmor_grids[cmor_ngrids].associated_variables[3]].id,CMOR_MAX_STRING);
+    }
+    cmor_set_variable_attribute(cmor_grids[cmor_ngrids].associated_variables[1],"bounds",'c',msg);
+  }
+  /*   if (area==NULL) { */
+  /*     snprintf(msg,CMOR_MAX_STRING,"it is recommended you pass the area values when defining a grid"); */
+  /*     cmor_handle_error(msg,CMOR_WARNING); */
+  /*   } */
+  /*   else { */
+  /*     cmor_copy_data(&cmor_grids[cmor_ngrids].area,area,type,n); */
+  /*     cmor_variable(&cmor_grids[cmor_ngrids].associated_variables[4],"area","m2",1,&axes[0],'d',NULL,NULL,NULL,NULL,NULL,NULL); */
+  /*     cmor_vars[cmor_grids[cmor_ngrids].associated_variables[4]].needsinit=0; */
+  /*   } */
+  *grid_id = -cmor_ngrids-10;
+  cmor_pop_traceback();
+  return 0;
+}
diff --git a/Src/cmor_md5.c b/Src/cmor_md5.c
new file mode 100644
index 0000000..a0d8bd3
--- /dev/null
+++ b/Src/cmor_md5.c
@@ -0,0 +1,309 @@
+/*
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest.  This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ */
+
+/* This code was modified in 1997 by Jim Kingdon of Cyclic Software to
+   not require an integer type which is exactly 32 bits.  This work
+   draws on the changes for the same purpose by Tatu Ylonen
+   <ylo at cs.hut.fi> as part of SSH, but since I didn't actually use
+   that code, there is no copyright issue.  I hereby disclaim
+   copyright in any changes I have made; this code remains in the
+   public domain.  */
+
+/* Note regarding cvs_* namespace: this avoids potential conflicts
+   with libraries such as some versions of Kerberos.  No particular
+   need to worry about whether the system supplies an MD5 library, as
+   this file is only about 3k of object code.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>	/* for memcpy() and memset() */
+
+/* Add prototype support.  */
+#ifndef PROTO
+#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
+#define PROTO(ARGS) ARGS
+#else
+#define PROTO(ARGS) ()
+#endif
+#endif
+
+#include "cmor_md5.h"
+
+/* Little-endian byte-swapping routines.  Note that these do not
+   depend on the size of datatypes such as cvs_uint32, nor do they require
+   us to detect the endianness of the machine we are running on.  It
+   is possible they should be macros for speed, but I would be
+   surprised if they were a performance bottleneck for MD5.  */
+
+static cvs_uint32
+getu32 (const unsigned char * addr)
+{
+	return (((((unsigned long)addr[3] << 8) | addr[2]) << 8)
+		| addr[1]) << 8 | addr[0];
+}
+
+static void
+putu32 (cvs_uint32 data, unsigned char *addr)
+{
+	addr[0] = (unsigned char)data;
+	addr[1] = (unsigned char)(data >> 8);
+	addr[2] = (unsigned char)(data >> 16);
+	addr[3] = (unsigned char)(data >> 24);
+}
+
+/*
+ * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
+ * initialization constants.
+ */
+void
+cvs_MD5Init (struct cvs_MD5Context *ctx)
+{
+	ctx->buf[0] = 0x67452301;
+	ctx->buf[1] = 0xefcdab89;
+	ctx->buf[2] = 0x98badcfe;
+	ctx->buf[3] = 0x10325476;
+
+	ctx->bits[0] = 0;
+	ctx->bits[1] = 0;
+}
+
+/*
+ * Update context to reflect the concatenation of another buffer full
+ * of bytes.
+ */
+void
+cvs_MD5Update (struct cvs_MD5Context *ctx, unsigned char const *buf, unsigned len)
+{
+	cvs_uint32 t;
+
+	/* Update bitcount */
+
+	t = ctx->bits[0];
+	if ((ctx->bits[0] = (t + ((cvs_uint32)len << 3)) & 0xffffffff) < t)
+		ctx->bits[1]++;	/* Carry from low to high */
+	ctx->bits[1] += len >> 29;
+
+	t = (t >> 3) & 0x3f;	/* Bytes already in shsInfo->data */
+
+	/* Handle any leading odd-sized chunks */
+
+	if ( t ) {
+		unsigned char *p = ctx->in + t;
+
+		t = 64-t;
+		if (len < t) {
+			memcpy(p, buf, len);
+			return;
+		}
+		memcpy(p, buf, t);
+		cvs_MD5Transform (ctx->buf, ctx->in);
+		buf += t;
+		len -= t;
+	}
+
+	/* Process data in 64-byte chunks */
+
+	while (len >= 64) {
+		memcpy(ctx->in, buf, 64);
+		cvs_MD5Transform (ctx->buf, ctx->in);
+		buf += 64;
+		len -= 64;
+	}
+
+	/* Handle any remaining bytes of data. */
+
+	memcpy(ctx->in, buf, len);
+}
+
+/*
+ * Final wrapup - pad to 64-byte boundary with the bit pattern 
+ * 1 0* (64-bit count of bits processed, MSB-first)
+ */
+void
+cvs_MD5Final (unsigned char digest[16], struct cvs_MD5Context *ctx)
+{
+	unsigned count;
+	unsigned char *p;
+
+	/* Compute number of bytes mod 64 */
+	count = (ctx->bits[0] >> 3) & 0x3F;
+
+	/* Set the first char of padding to 0x80.  This is safe since there is
+	   always at least one byte free */
+	p = ctx->in + count;
+	*p++ = 0x80;
+
+	/* Bytes of padding needed to make 64 bytes */
+	count = 64 - 1 - count;
+
+	/* Pad out to 56 mod 64 */
+	if (count < 8) {
+		/* Two lots of padding:  Pad the first block to 64 bytes */
+		memset(p, 0, count);
+		cvs_MD5Transform (ctx->buf, ctx->in);
+
+		/* Now fill the next block with 56 bytes */
+		memset(ctx->in, 0, 56);
+	} else {
+		/* Pad block to 56 bytes */
+		memset(p, 0, count-8);
+	}
+
+	/* Append length in bits and transform */
+	putu32(ctx->bits[0], ctx->in + 56);
+	putu32(ctx->bits[1], ctx->in + 60);
+
+	cvs_MD5Transform (ctx->buf, ctx->in);
+	putu32(ctx->buf[0], digest);
+	putu32(ctx->buf[1], digest + 4);
+	putu32(ctx->buf[2], digest + 8);
+	putu32(ctx->buf[3], digest + 12);
+	memset(ctx, 0, sizeof(ctx));	/* In case it's sensitive */
+}
+
+#ifndef ASM_MD5
+
+/* The four core functions - F1 is optimized somewhat */
+
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f, w, x, y, z, data, s) \
+	( w += f(x, y, z) + data, w &= 0xffffffff, w = w<<s | w>>(32-s), w += x )
+
+/*
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data.  MD5Update blocks
+ * the data and converts bytes into longwords for this routine.
+ */
+void
+cvs_MD5Transform (cvs_uint32 buf[4], const unsigned char inraw[64])
+{
+	register cvs_uint32 a, b, c, d;
+	cvs_uint32 in[16];
+	int i;
+
+	for (i = 0; i < 16; ++i)
+		in[i] = getu32 (inraw + 4 * i);
+
+	a = buf[0];
+	b = buf[1];
+	c = buf[2];
+	d = buf[3];
+
+	MD5STEP(F1, a, b, c, d, in[ 0]+0xd76aa478,  7);
+	MD5STEP(F1, d, a, b, c, in[ 1]+0xe8c7b756, 12);
+	MD5STEP(F1, c, d, a, b, in[ 2]+0x242070db, 17);
+	MD5STEP(F1, b, c, d, a, in[ 3]+0xc1bdceee, 22);
+	MD5STEP(F1, a, b, c, d, in[ 4]+0xf57c0faf,  7);
+	MD5STEP(F1, d, a, b, c, in[ 5]+0x4787c62a, 12);
+	MD5STEP(F1, c, d, a, b, in[ 6]+0xa8304613, 17);
+	MD5STEP(F1, b, c, d, a, in[ 7]+0xfd469501, 22);
+	MD5STEP(F1, a, b, c, d, in[ 8]+0x698098d8,  7);
+	MD5STEP(F1, d, a, b, c, in[ 9]+0x8b44f7af, 12);
+	MD5STEP(F1, c, d, a, b, in[10]+0xffff5bb1, 17);
+	MD5STEP(F1, b, c, d, a, in[11]+0x895cd7be, 22);
+	MD5STEP(F1, a, b, c, d, in[12]+0x6b901122,  7);
+	MD5STEP(F1, d, a, b, c, in[13]+0xfd987193, 12);
+	MD5STEP(F1, c, d, a, b, in[14]+0xa679438e, 17);
+	MD5STEP(F1, b, c, d, a, in[15]+0x49b40821, 22);
+
+	MD5STEP(F2, a, b, c, d, in[ 1]+0xf61e2562,  5);
+	MD5STEP(F2, d, a, b, c, in[ 6]+0xc040b340,  9);
+	MD5STEP(F2, c, d, a, b, in[11]+0x265e5a51, 14);
+	MD5STEP(F2, b, c, d, a, in[ 0]+0xe9b6c7aa, 20);
+	MD5STEP(F2, a, b, c, d, in[ 5]+0xd62f105d,  5);
+	MD5STEP(F2, d, a, b, c, in[10]+0x02441453,  9);
+	MD5STEP(F2, c, d, a, b, in[15]+0xd8a1e681, 14);
+	MD5STEP(F2, b, c, d, a, in[ 4]+0xe7d3fbc8, 20);
+	MD5STEP(F2, a, b, c, d, in[ 9]+0x21e1cde6,  5);
+	MD5STEP(F2, d, a, b, c, in[14]+0xc33707d6,  9);
+	MD5STEP(F2, c, d, a, b, in[ 3]+0xf4d50d87, 14);
+	MD5STEP(F2, b, c, d, a, in[ 8]+0x455a14ed, 20);
+	MD5STEP(F2, a, b, c, d, in[13]+0xa9e3e905,  5);
+	MD5STEP(F2, d, a, b, c, in[ 2]+0xfcefa3f8,  9);
+	MD5STEP(F2, c, d, a, b, in[ 7]+0x676f02d9, 14);
+	MD5STEP(F2, b, c, d, a, in[12]+0x8d2a4c8a, 20);
+
+	MD5STEP(F3, a, b, c, d, in[ 5]+0xfffa3942,  4);
+	MD5STEP(F3, d, a, b, c, in[ 8]+0x8771f681, 11);
+	MD5STEP(F3, c, d, a, b, in[11]+0x6d9d6122, 16);
+	MD5STEP(F3, b, c, d, a, in[14]+0xfde5380c, 23);
+	MD5STEP(F3, a, b, c, d, in[ 1]+0xa4beea44,  4);
+	MD5STEP(F3, d, a, b, c, in[ 4]+0x4bdecfa9, 11);
+	MD5STEP(F3, c, d, a, b, in[ 7]+0xf6bb4b60, 16);
+	MD5STEP(F3, b, c, d, a, in[10]+0xbebfbc70, 23);
+	MD5STEP(F3, a, b, c, d, in[13]+0x289b7ec6,  4);
+	MD5STEP(F3, d, a, b, c, in[ 0]+0xeaa127fa, 11);
+	MD5STEP(F3, c, d, a, b, in[ 3]+0xd4ef3085, 16);
+	MD5STEP(F3, b, c, d, a, in[ 6]+0x04881d05, 23);
+	MD5STEP(F3, a, b, c, d, in[ 9]+0xd9d4d039,  4);
+	MD5STEP(F3, d, a, b, c, in[12]+0xe6db99e5, 11);
+	MD5STEP(F3, c, d, a, b, in[15]+0x1fa27cf8, 16);
+	MD5STEP(F3, b, c, d, a, in[ 2]+0xc4ac5665, 23);
+
+	MD5STEP(F4, a, b, c, d, in[ 0]+0xf4292244,  6);
+	MD5STEP(F4, d, a, b, c, in[ 7]+0x432aff97, 10);
+	MD5STEP(F4, c, d, a, b, in[14]+0xab9423a7, 15);
+	MD5STEP(F4, b, c, d, a, in[ 5]+0xfc93a039, 21);
+	MD5STEP(F4, a, b, c, d, in[12]+0x655b59c3,  6);
+	MD5STEP(F4, d, a, b, c, in[ 3]+0x8f0ccc92, 10);
+	MD5STEP(F4, c, d, a, b, in[10]+0xffeff47d, 15);
+	MD5STEP(F4, b, c, d, a, in[ 1]+0x85845dd1, 21);
+	MD5STEP(F4, a, b, c, d, in[ 8]+0x6fa87e4f,  6);
+	MD5STEP(F4, d, a, b, c, in[15]+0xfe2ce6e0, 10);
+	MD5STEP(F4, c, d, a, b, in[ 6]+0xa3014314, 15);
+	MD5STEP(F4, b, c, d, a, in[13]+0x4e0811a1, 21);
+	MD5STEP(F4, a, b, c, d, in[ 4]+0xf7537e82,  6);
+	MD5STEP(F4, d, a, b, c, in[11]+0xbd3af235, 10);
+	MD5STEP(F4, c, d, a, b, in[ 2]+0x2ad7d2bb, 15);
+	MD5STEP(F4, b, c, d, a, in[ 9]+0xeb86d391, 21);
+
+	buf[0] += a;
+	buf[1] += b;
+	buf[2] += c;
+	buf[3] += d;
+}
+#endif
+
+/* Simple test program.  Can use it to manually run the tests from
+   RFC1321 for example.  */
+#include <stdio.h>
+
+void cmor_md5 (FILE *inputfile,unsigned char checksum[16])
+{
+  struct cvs_MD5Context context;
+  char c,d;
+  
+  cvs_MD5Init (&context);
+  c= fgetc(inputfile);
+  d=EOF;
+  while (c!=d) {
+    cvs_MD5Update (&context, (unsigned char *)&c, 1);
+    c= fgetc(inputfile);
+  } 
+  rewind(inputfile); 
+  cvs_MD5Final (checksum, &context);
+
+  return;
+}
diff --git a/Src/cmor_tables.c b/Src/cmor_tables.c
new file mode 100644
index 0000000..3bcf691
--- /dev/null
+++ b/Src/cmor_tables.c
@@ -0,0 +1,409 @@
+#include <stdio.h>
+#include <string.h>
+#include "cmor.h"
+#include "cmor_func_def.h"
+#include <netcdf.h>
+#include <udunits2.h>
+#include <stdlib.h>
+
+int wfgetc(FILE *afile) {
+  int i = fgetc(afile);
+  while (i=='\r') {
+    i=fgetc(afile);
+  }
+  return i;
+}
+
+void cmor_init_table(cmor_table_t *table, int id)
+{
+  int i;
+  cmor_add_traceback("cmor_init_table");
+  cmor_is_setup();
+  /* init the table */
+  table->id=id;
+  table->nvars=-1;
+  table->naxes=-1;
+  table->nexps=-1;
+  table->nmappings=-1;
+  table->cf_version=1.4;
+  table->cmor_version=2.0;
+  table->project_id[0]='\0';
+  table->table_id[0]='\0';
+  strcpy(table->realm,"REALM");
+  table->date[0]='\0';
+  table->missing_value=1.e20;
+  table->interval=0.;
+  table->URL[0]='\0';
+  strcpy(table->product,"output");
+  table->path[0]='\0';
+  table->required_gbl_att[0]='\0';
+  table->frequency[0]='\0';
+  table->nforcings=0;
+  for (i=0;i<CMOR_MAX_ELEMENTS;i++) {
+    table->expt_ids[i][0]='\0';
+    table->sht_expt_ids[i][0]='\0';
+  }
+
+  cmor_pop_traceback();
+}
+
+int cmor_set_dataset_att(cmor_table_t *table, char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] ){
+  int n,i,j;
+  float d,d2;
+  char value[CMOR_MAX_STRING];
+  char value2[CMOR_MAX_STRING];
+  extern int cmor_ntables;
+  char **bstr;
+
+  cmor_add_traceback("cmor_set_dataset_att");
+  cmor_is_setup();
+
+  strncpy(value,val,CMOR_MAX_STRING);
+
+  if (strcmp(att,"cmor_version")==0) {
+    d2 = CMOR_VERSION_MAJOR;
+    d = CMOR_VERSION_MINOR;
+    while(d>1.) d/=10.;
+    d2+=d;
+    sscanf(value,"%f",&d);
+    if (d>d2) {
+      snprintf(value2,CMOR_MAX_STRING,"Table is defined for cmor_version %f, this library verson is: %i.%i.%i, %f",d,CMOR_VERSION_MAJOR,CMOR_VERSION_MINOR,CMOR_VERSION_PATCH,d2);
+      cmor_handle_error(value2,CMOR_CRITICAL);
+      cmor_ntables--;
+      cmor_pop_traceback();
+      return 1;
+    }
+    table->cmor_version=d;
+  }
+  else if (strcmp(att,"cf_version")==0) {
+    d = atof(value);
+    table->cf_version=d;
+  }
+  else if (strcmp(att,"required_global_attributes")==0) {
+    strncpy(table->required_gbl_att,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"project_id")==0) {
+    strncpy(table->project_id,value,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"modeling_realm")==0) {
+    strncpy(table->realm,value,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"table_date")==0) {
+    strncpy(table->date,value,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"baseURL")==0) {
+    strncpy(table->URL,value,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"forcings")==0) {
+    cmor_convert_string_to_list(value,'c',&table->forcings,&table->nforcings);
+  }
+  else if (strcmp(att,"product")==0) {
+    strncpy(table->product,value,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"frequency")==0) {
+    strncpy(table->frequency,value,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"table_id")==0) {
+    for (n=0;n==cmor_ntables;n++) {
+     if (strcmp(cmor_tables[n].table_id,value)==0) {
+	cmor_handle_error("Table already defined",CMOR_CRITICAL);
+	cmor_ntables--;
+	cmor_pop_traceback();
+	return 1;
+      }
+    }
+    n = strlen(value);
+    for (i=n-1;i>0;i--) {
+      if (value[i]==' ') break;
+    }
+    if (value[i]==' ') i++;
+
+    for (j=i;j<n;j++) value2[j-i]=value[j];
+    value2[n-i]='\0';
+
+    strcpy(table->table_id,value2);
+  }
+  else if (strcmp(att,"expt_id_ok")==0) {
+    table->nexps++;
+    if (table->nexps>CMOR_MAX_ELEMENTS) {
+      cmor_handle_error("Too many experiments defined",CMOR_CRITICAL);
+      cmor_ntables--;
+      cmor_pop_traceback();
+      return 1;
+    }
+    if (value[0]=='\'') for (n=0;n<strlen(value)-1;n++) value[n]=value[n+1] ; /* removes leading "'" */
+    n=strlen(value);
+    if (value[n-2]=='\'') value[n-2]='\0'; /*removes trailing "'" */
+    /* ok here we look for a ' which means there is a short name associated with it */
+    n=-1;
+    for(j=0;j<strlen(value);j++) {
+      if (value[j]=='\'') {
+	n=j;
+	break;
+      }
+    }
+    if (n==-1) {
+      strncpy(table->expt_ids[table->nexps],value,CMOR_MAX_STRING);
+      strcpy(table->sht_expt_ids[table->nexps],"");
+    }
+    else {
+      /* ok looks like we have a short name let clook for the next ' */
+      i=-1;
+      for (j=n+1;j<strlen(value);j++) {
+	if (value[j]=='\'') i=j;
+      }
+      if (i==-1) {/* ok we must have a ' in our exp_id_ok */
+	strncpy(table->expt_ids[table->nexps],value,CMOR_MAX_STRING);
+	strcpy(table->sht_expt_ids[table->nexps],"");
+      }
+      else {
+	for (j=i+1;j<strlen(value);j++) {
+	  value2[j-i-1]=value[j];
+	  value2[j-i]='\0';
+	}
+	strncpy(table->sht_expt_ids[table->nexps],value2,CMOR_MAX_STRING);
+	value[n]='\0';
+	strncpy(table->expt_ids[table->nexps],value,CMOR_MAX_STRING);
+      }
+    }
+  }
+  else if (strcmp(att,"approx_interval")==0) {
+    sscanf(value,"%lf",&table->interval);
+  }
+  else if (strcmp(att,"missing_value")==0) {
+    sscanf(value,"%f",&table->missing_value);
+  }
+  else if (strcmp(att,"magic_number")==0) {
+    /* Never actually implemented supposed to control table has not been altered */
+  }
+  else {
+    snprintf(value,CMOR_MAX_STRING,"unknown keyword for dataset: %s (%s)",att,value);
+    cmor_handle_error(value,CMOR_WARNING);
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_set_table(int table) {
+  extern int CMOR_TABLE;
+  char msg[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_set_table");
+  cmor_is_setup();
+  if (table>cmor_ntables) {
+    snprintf(msg,CMOR_MAX_STRING,"Invalid table number: %i",table);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (cmor_tables[table].table_id=='\0') cmor_handle_error("Invalid table , not loaded yet!",CMOR_CRITICAL);
+  CMOR_TABLE = table;
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_load_table(char table[CMOR_MAX_STRING], int *table_id) {
+  FILE *table_file;
+  char word[CMOR_MAX_STRING],word2[CMOR_MAX_STRING];
+  int i,n;
+  int do_var=0,do_axis=0,do_dataset=1,do_mapping=0;
+  extern int CMOR_TABLE,cmor_ntables;
+  extern char cmor_input_path[CMOR_MAX_STRING] ;
+  char msg[CMOR_MAX_STRING];
+
+  cmor_add_traceback("cmor_load_table");
+  cmor_is_setup();
+  
+/*   printf("loading table: %s\n",table); */
+  for (i=0;i<cmor_ntables+1;i++) {
+    if (strcmp(cmor_tables[i].path,table)==0) {
+      CMOR_TABLE = i;
+      *table_id = i;
+/*       printf("table %s was already loaded, no need to do that again\n",table); */
+      cmor_pop_traceback();
+      return 0;
+    }
+  }
+  cmor_ntables+=1;
+  cmor_init_table(&cmor_tables[cmor_ntables],cmor_ntables);
+  table_file=fopen(table,"r");
+  if (table_file == NULL) {
+    if (table[0]!='/') {
+      snprintf(word,CMOR_MAX_STRING,"%s/%s",cmor_input_path,table);
+      table_file=fopen(word,"r");
+    }
+    if (table_file == NULL) {
+      snprintf(word,CMOR_MAX_STRING,"Could not find table: %s",table);
+      cmor_handle_error(word,CMOR_NORMAL);
+      cmor_ntables-=1;
+      cmor_pop_traceback();
+      return 1;
+    }
+  }
+
+  /* ok now we need to store the md5 */
+  cmor_md5(table_file,cmor_tables[cmor_ntables].md5);
+  i = wfgetc(table_file);
+  while (i != EOF ) {
+    /* skip blanks and returns */
+    while((i=='\n') || i==' ' || i=='\t') i = wfgetc(table_file);
+    /* skip comment lines */
+    /*printf("looking at first line charcter:--%c--\n",i);*/
+    while (i=='!') {
+      i = wfgetc(table_file);
+      if (i==EOF) break;
+      /*printf("ok it is comment line, second char is --%c--\n");*/
+      if (i=='=') { /* we found the head of a definition section */
+	while(i!='\n') i = wfgetc(table_file);
+	i = wfgetc(table_file);
+	if (i==EOF) break;
+	/* now read the word from the definition */
+	n=0;
+	while(i!=':') {
+	  word[n] = i;
+	  i = wfgetc(table_file);
+	  n+=1;
+	}
+	word[n]='\0';
+	/* now figures out the name of the entry */
+	i = wfgetc(table_file);
+	while (i==' ' || i=='\t') i = wfgetc(table_file);
+	n=0;
+	while((i!='\n') && i!=' ' && i!='\t') {
+	  word2[n]=i;
+	  i = wfgetc(table_file);
+	  n+=1;
+	}
+	word2[n]='\0';
+	/* finishes the line */
+	while (i!='\n') i = wfgetc(table_file);
+	i = wfgetc(table_file);
+	/*skip the next line */
+	while (i!='\n') i = wfgetc(table_file);
+	i = wfgetc(table_file);
+	/*printf("entry %s, name: %s\n",word,word2);*/
+	/* Now let's see what we found */
+	if (strcmp(word,"axis_entry")==0) {
+	  do_dataset=0;
+	  do_var=0;
+	  do_axis=1;
+	  do_mapping=0;
+	  cmor_tables[cmor_ntables].naxes++;
+	  if (cmor_tables[cmor_ntables].naxes>=CMOR_MAX_ELEMENTS) {
+	    cmor_handle_error("Too many axes defined for table",CMOR_CRITICAL);
+	    cmor_ntables--;
+	    cmor_pop_traceback();
+	    return 1;
+	  }
+	  /* init the axis def */
+/* 	  printf("initializing axis: %s\n",word2); */
+	  cmor_init_axis_def(&cmor_tables[cmor_ntables].axes[cmor_tables[cmor_ntables].naxes],cmor_ntables);
+	  cmor_set_axis_def_att(&cmor_tables[cmor_ntables].axes[cmor_tables[cmor_ntables].naxes],"id",word2);
+	}
+	else if (strcmp(word,"variable_entry")==0) {
+	  do_dataset=0;
+	  do_var=1;
+	  do_axis=0;
+	  do_mapping=0;
+	  cmor_tables[cmor_ntables].nvars++;
+	  if (cmor_tables[cmor_ntables].nvars>=CMOR_MAX_ELEMENTS) {
+	    cmor_handle_error("Too many variables defined for table",CMOR_CRITICAL);
+	    cmor_ntables--;
+	    cmor_pop_traceback();
+	    return 1;
+	  }
+	  /* init the variable def */
+	  cmor_init_var_def(&cmor_tables[cmor_ntables].vars[cmor_tables[cmor_ntables].nvars],cmor_ntables);
+	  cmor_set_var_def_att(&cmor_tables[cmor_ntables].vars[cmor_tables[cmor_ntables].nvars],"id",word2);
+
+	}
+	else if (strcmp(word,"mapping_entry")==0) {
+	  do_dataset=0;
+	  do_var=0;
+	  do_axis=0;
+	  do_mapping=1;
+	  cmor_tables[cmor_ntables].nmappings++;
+	  if (cmor_tables[cmor_ntables].nmappings>=CMOR_MAX_ELEMENTS) {
+	    cmor_handle_error("Too many mappings defined for table",CMOR_CRITICAL);
+	    cmor_ntables--;
+	    cmor_pop_traceback();
+	    return 1;
+	  }
+	  for(n=0;n<cmor_tables[cmor_ntables].nmappings-1;n++) if (strcmp(cmor_tables[cmor_ntables].mappings[cmor_tables[cmor_ntables].nmappings].id,cmor_tables[cmor_ntables].mappings[n].id)==0) {
+	      snprintf(msg,CMOR_MAX_STRING,"mapping: %s already defined within this table",cmor_tables[cmor_ntables].mappings[n].id);
+	      cmor_handle_error(msg,CMOR_CRITICAL);
+	    };
+
+	  /* init the variable def */
+	  cmor_init_grid_mapping(&cmor_tables[cmor_ntables].mappings[cmor_tables[cmor_ntables].nmappings],word2);
+	}
+	else { /* nothing knwon we will not be setting any attributes! */
+	  snprintf(msg,CMOR_MAX_STRING,"unknown section: %s",word);
+	  cmor_handle_error(msg,CMOR_WARNING);
+	  do_dataset=0;
+	  do_var=0;
+	  do_axis=0;
+	  do_mapping=0;
+	}
+	/*printf("ok now i is: --%c--\n",i);*/
+    }
+      else { /* just a commented out line, let's skip it */
+	/*printf("all right skiping line\n");*/
+	while(i!='\n') i = wfgetc(table_file);
+	i = wfgetc(table_file);
+	while((i==' ') || (i=='\n') || (i=='\t')) i = wfgetc(table_file);
+	/*printf("ok now i is: --%c--\n",i);*/
+      }
+    }
+    if (i==EOF) break;
+    /* ok here we must have a word then, let's read it and it's value */
+    n=0;
+    while(i!=':'){
+      word[n]=i;
+      i = wfgetc(table_file);
+      n+=1;
+    }
+    i = wfgetc(table_file);
+    word[n]='\0';
+    while (i==' ' || i=='\t') i = wfgetc(table_file);
+    n=0;
+    while((i!='\n') && (i!='!')) {
+      word2[n]=i;
+      i = wfgetc(table_file);
+      n+=1;
+    }
+    word2[n]='\0';
+    n=strlen(word2);
+    for (n=strlen(word2)-1;n>-1;n--) {
+      if (word2[n]==' ' || word2[n]=='\t' ) word2[n]='\0';
+      else break;
+    }
+    /* finishes the line */
+    while (i!='\n' && i!=EOF) i = wfgetc(table_file);
+    /*printf("got entry: %s with value %s, var: %i, axis: %i, dat: %i\n",word,word2,do_var,do_axis,do_dataset);*/
+    /* First check for table/dataset mode values */
+    if (do_dataset==1) {
+      if (cmor_set_dataset_att(&cmor_tables[cmor_ntables],word,word2)==1) {
+	cmor_pop_traceback();
+	return 1; /* sometihng bad might happen */
+      }
+    }
+    else if (do_var==1) {
+      cmor_set_var_def_att(&cmor_tables[cmor_ntables].vars[cmor_tables[cmor_ntables].nvars],word,word2);
+    }
+    else if (do_axis ==1){
+      cmor_set_axis_def_att(&cmor_tables[cmor_ntables].axes[cmor_tables[cmor_ntables].naxes],word,word2);
+    }
+    else if (do_mapping==1) {
+      cmor_set_mapping_attribute(&cmor_tables[cmor_ntables].mappings[cmor_tables[cmor_ntables].nmappings],word,word2);
+    }
+    else {
+      snprintf(msg,CMOR_MAX_STRING,"attribute for unknown section: %s,%s",word,word2);
+      cmor_handle_error(msg,CMOR_WARNING);
+      /*printf("attribute for unknown section\n");*/
+    }
+  }
+  fclose(table_file);
+  *table_id = cmor_ntables;
+  strcpy(cmor_tables[cmor_ntables].path,table);
+  CMOR_TABLE = cmor_ntables;
+  cmor_pop_traceback();
+  return 0;
+}
diff --git a/Src/cmor_variables.c b/Src/cmor_variables.c
new file mode 100644
index 0000000..e92b21e
--- /dev/null
+++ b/Src/cmor_variables.c
@@ -0,0 +1,1578 @@
+#include <time.h>
+#include <stdio.h>
+#include <string.h>
+#include "cmor.h"
+#include <netcdf.h>
+#include <udunits2.h>
+#include <stdlib.h>
+#include <math.h>
+
+
+int cmor_is_required_variable_attribute(cmor_var_def_t var, char *attribute_name) 
+{
+  
+  char astr[CMOR_MAX_STRING];
+  int i,j;
+  if (var.required[0]=='\0') {
+    return 1;
+  }
+
+  i=0;
+  astr[0]='\0';
+  j=0;
+  while(var.required[i]!='\0') {
+    while((var.required[i]!=' ') && (var.required[i]!='\0')) {
+      astr[j]=var.required[i];
+      i+=1;
+      j+=1;
+    }
+    astr[j]='\0';
+    if (strncmp(astr,attribute_name,CMOR_MAX_STRING)==0) return 0;
+    j=0;
+    astr[0]='\0';
+    while(var.required[i]==' ') i+=1;
+ }
+  return 1;
+}
+
+int cmor_has_required_variable_attributes(int var_id) 
+{
+  extern cmor_var_t cmor_vars[];
+  char astr[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+  int i,j;
+  cmor_var_def_t var;
+  cmor_add_traceback("cmor_has_required_variable_attributes");
+  var = cmor_tables[cmor_vars[var_id].ref_table_id].vars[cmor_vars[var_id].ref_var_id];
+  
+  if (var.required[0]=='\0') {
+    cmor_pop_traceback();
+    return 0;
+  }
+  i=0;
+  astr[0]='\0';
+  j=0;
+  while(var.required[i]!='\0') {
+    while((var.required[i]!=' ') && (var.required[i]!='\0')) {
+      astr[j]=var.required[i];
+      i+=1;
+      j+=1;
+    }
+    astr[j]='\0';
+    if (cmor_has_variable_attribute(var_id,astr)!=0) {
+      snprintf(msg,CMOR_MAX_STRING,"variable %s does not have required attribute: %s",cmor_vars[var_id].id,astr);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    j=0;
+    astr[0]='\0';
+    while(var.required[i]==' ') i+=1;
+  }
+  cmor_pop_traceback();
+  return 0;
+
+  
+}
+int cmor_set_variable_attribute(int id, char *attribute_name, char type, void *value)
+{
+  extern cmor_var_t cmor_vars[];
+  int i,index;
+  char msg[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_set_variable_attribute");
+  cmor_is_setup();
+  index=-1;
+  cmor_trim_string(attribute_name,msg);
+  for (i=0;i<cmor_vars[id].nattributes;i++) {
+    if (strcmp(cmor_vars[id].attributes[i],msg)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {index=cmor_vars[id].nattributes; cmor_vars[id].nattributes+=1;}
+  strncpy(cmor_vars[id].attributes[index],msg,CMOR_MAX_STRING); /*stores the name */
+  cmor_vars[id].attributes_type[i]=type;
+  if (type=='c')  {
+    if (strlen(value)>0) {
+      strncpytrim(cmor_vars[id].attributes_values_char[index],value,CMOR_MAX_STRING);
+    }
+    else {
+      strcpy(cmor_vars[id].attributes[index],"");
+    }
+  }
+  else if (type=='f')  cmor_vars[id].attributes_values_num[index] = (double)*(float*)value;
+  else if (type=='i')  cmor_vars[id].attributes_values_num[index] = (double)*(int*)value;
+  else if (type=='d') cmor_vars[id].attributes_values_num[index] = (double)*(double*)value;
+  else if (type=='l') cmor_vars[id].attributes_values_num[index] = (double)*(long*)value;
+  else {
+    snprintf(msg,CMOR_MAX_STRING,"unknown type %c allowed types are c,i,l,f,d",type);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+int cmor_get_variable_attribute(int id, char *attribute_name, void *value)
+{
+  extern cmor_var_t cmor_vars[];
+  int i,index;
+  char msg[CMOR_MAX_STRING];
+  char type;
+  cmor_add_traceback("cmor_get_variable_attribute");
+  cmor_is_setup();
+  index=-1;
+  for (i=0;i<cmor_vars[id].nattributes;i++) {
+    if (strcmp(cmor_vars[id].attributes[i],attribute_name)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Attribute %s could not be found for variable %i",attribute_name,id);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  type = cmor_vars[id].attributes_type[i];
+  if (type=='c')  strncpy(value,cmor_vars[id].attributes_values_char[index],CMOR_MAX_STRING);
+  else if (type=='f') value = (float *)&cmor_vars[id].attributes_values_num[index];
+  else if (type=='i')  value = (int *)&cmor_vars[id].attributes_values_num[index];
+  else if (type=='l') value = (long *)&cmor_vars[id].attributes_values_num[index];
+  else  value = (double *)&cmor_vars[id].attributes_values_num[index];
+  cmor_pop_traceback();
+  return 0;
+}
+int cmor_has_variable_attribute(int id, char *attribute_name)
+{
+  extern cmor_var_t cmor_vars[];
+  int i,index;
+  cmor_add_traceback("cmor_has_variable_attribute");
+  cmor_is_setup();
+  index=-1;
+  for (i=0;i<cmor_vars[id].nattributes;i++) {
+    if (strcmp(cmor_vars[id].attributes[i],attribute_name)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {
+   cmor_pop_traceback();
+    return 1;
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_get_variable_attribute_names(int id, int *nattributes,char attributes_names[][CMOR_MAX_STRING])
+{
+  extern cmor_var_t cmor_vars[];
+  int i;
+  cmor_add_traceback("cmor_get_variable_attribute_names");
+  cmor_is_setup();
+  *nattributes = cmor_vars[id].nattributes;
+  for (i=0;i<cmor_vars[id].nattributes;i++) {
+    strncpy(attributes_names[i],cmor_vars[id].attributes[i],CMOR_MAX_STRING);
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_get_variable_attribute_type(int id, char *attribute_name, char *type)
+{
+  extern cmor_var_t cmor_vars[];
+  int i,index;
+  char msg[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_get_variable_attribute_type");
+  cmor_is_setup();
+  index=-1;
+  for (i=0;i<cmor_vars[id].nattributes;i++) {
+    if (strcmp(cmor_vars[id].attributes[i],attribute_name)==0) {index=i;break;} /* we found it */
+  }
+  if (index==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Attribute %s could not be found for variable %i",attribute_name,id);
+    cmor_handle_error(msg,CMOR_NORMAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+  *type = cmor_vars[id].attributes_type[i];
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_zfactor (int *zvar_id,int axis_id, char *name, char *units, int ndims, int axes_ids[], char type, void *values, void *bounds)
+{
+  extern int cmor_nvars;
+  extern cmor_var_t cmor_vars[];
+
+  int i,j,k;
+  int n;
+  int var_id;
+  char msg[CMOR_MAX_STRING];
+  extern ut_system *ut_read;
+  ut_unit *user_units, *cmor_units;
+  cv_converter *ut_cmor_converter;
+  char local_unit[CMOR_MAX_STRING];
+  double tmp;
+
+  cmor_add_traceback("cmor_zfactor");
+  cmor_is_setup();
+
+  /* first check if we need to convert values */
+/*   printf("in zf:%s, %s, %i, %i\n",name,cmor_axes[axis_id].id,cmor_axes[axis_id].hybrid_out,cmor_axes[axis_id].hybrid_in); */
+  if (cmor_axes[axis_id].hybrid_out==cmor_axes[axis_id].hybrid_in) { /* no it's a normal hybrid, no conv */
+    i = cmor_variable(&var_id,name,units,ndims,axes_ids,type,NULL,NULL,NULL,NULL,NULL,NULL);
+    cmor_vars[var_id].needsinit=0;
+    cmor_vars[var_id].zaxis=axis_id;
+    if (values != NULL) {
+      n=1;
+      for (i=0;i<ndims;i++) n*=cmor_axes[axes_ids[i]].length;
+      cmor_vars[var_id].values = malloc(n*sizeof(double));
+      if (cmor_vars[var_id].values == NULL) {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_zfactor: cannot allocate memory for %i double elts %s var '%s'",n,cmor_vars[*zvar_id].id,cmor_vars[var_id].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      for (i=0;i<n;i++) {
+	if (type=='d')  cmor_vars[var_id].values[i] = (double)((double *)values)[i];
+	else if (type=='f')  cmor_vars[var_id].values[i] = (double)((float *)values)[i];
+	else if (type=='l')  cmor_vars[var_id].values[i] = (double)((long *)values)[i];
+	else if (type=='i')  cmor_vars[var_id].values[i] = (double)((int *)values)[i];
+      }
+
+      /* ok we may need to convert to some decent untis */
+      strncpy(local_unit,cmor_vars[var_id].ounits,CMOR_MAX_STRING);
+      cmor_units = ut_parse(ut_read, local_unit,UT_ASCII);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error parsing units: %s",local_unit);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      strncpy(local_unit,units,CMOR_MAX_STRING);
+      ut_trim(local_unit,UT_ASCII);
+      user_units = ut_parse(ut_read, local_unit, UT_ASCII);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error parsing units: %s",local_unit);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error getting converter from %s to %s",units,cmor_vars[var_id].ounits);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      cv_convert_doubles(ut_cmor_converter,&cmor_vars[var_id].values[0],n,&cmor_vars[var_id].values[0]);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error converting units");
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      cv_free(ut_cmor_converter);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      ut_free(cmor_units);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      ut_free(user_units);
+      if (ut_get_status() != UT_SUCCESS) {
+	snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+
+      cmor_vars[var_id].itype='d';
+      *zvar_id= var_id; 
+    }
+    else {
+      *zvar_id = var_id;
+    }
+    if (bounds != NULL) {
+      if (ndims!=1) {
+	snprintf(msg,CMOR_MAX_STRING,"zfactor %s: you passed bounds values but you also declared %i dimensions, we will ignore you bounds",name,ndims);
+	cmor_handle_error(msg,CMOR_WARNING);
+      }
+      else {
+	strncpy(msg,name,CMOR_MAX_STRING);
+	strncat(msg,"_bnds",CMOR_MAX_STRING-strlen(msg));
+	i = cmor_variable(&var_id,msg,units,ndims,axes_ids,'d',NULL,NULL,NULL,NULL,NULL,NULL);
+	cmor_vars[var_id].zaxis=axis_id;
+	cmor_vars[var_id].needsinit=0;
+/* 	printf("setting Zaxis to:%i for var: %i (%s) \n",axis_id,var_id,cmor_vars[var_id].id); */
+	n = cmor_axes[axes_ids[0]].length;
+	cmor_vars[var_id].values = malloc(2*n*sizeof(double));
+	if ( cmor_vars[var_id].values == NULL)  {
+	  snprintf(msg,CMOR_MAX_STRING,"cmor_zfactor: cannot allocate memory for %i double bounds elts %s var '%s'",2*n,cmor_vars[*zvar_id].id,cmor_vars[var_id].id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	cmor_vars[var_id].isbounds=1;
+	for (i=0;i<n;i++) {
+	  if (type=='d')  { cmor_vars[var_id].values[2*i] = (double)((double *)bounds)[i];cmor_vars[var_id].values[2*i+1] = (double)((double *)bounds)[i+1];}
+	  else if (type=='f')  { cmor_vars[var_id].values[2*i] = (double)((float *)bounds)[i];cmor_vars[var_id].values[2*i+1] = (double)((float *)bounds)[i+1];}
+	  else if (type=='l')  { cmor_vars[var_id].values[2*i] = (double)((long *)bounds)[i];cmor_vars[var_id].values[2*i+1] = (double)((long *)bounds)[i+1];}
+	  else if (type=='i')  { cmor_vars[var_id].values[2*i] = (double)((int *)bounds)[i];cmor_vars[var_id].values[2*i+1] = (double)((int *)bounds)[i+1];}
+	}
+	/* ok we may need to convert to some decent untis */
+	strncpy(local_unit,cmor_vars[var_id].ounits,CMOR_MAX_STRING);
+	cmor_units = ut_parse(ut_read, local_unit,UT_ASCII);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error parsing units: %s",local_unit);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	strncpy(local_unit,units,CMOR_MAX_STRING);
+	ut_trim(local_unit,UT_ASCII);
+	user_units = ut_parse(ut_read, local_unit, UT_ASCII);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error parsing units: %s",local_unit);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error getting converter from %s to %s",units,cmor_vars[var_id].ounits);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	cv_convert_doubles(ut_cmor_converter,&cmor_vars[var_id].values[0],2*n,&cmor_vars[var_id].values[0]);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error converting units");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	cv_free(ut_cmor_converter);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+	ut_free(cmor_units);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	ut_free(user_units);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+      }
+    }
+  }
+  else {
+    /* first prepare the conversion thing */
+    
+    /* stores the original hybrid_in to put back later */
+    i = cmor_axes[axis_id].hybrid_in;
+    cmor_axes[axis_id].hybrid_in = cmor_axes[axis_id].hybrid_out;
+/*     printf("input type was: %i\n",i); */
+    /* ok we now have 3 possible case */
+    if (i==1) {
+      n = cmor_zfactor(zvar_id,axis_id,name,units,ndims,axes_ids,type,values,bounds);
+    }
+    else if (i == 2) { /* case alternate hybrid sigma */
+      if (strcmp(name,"ap")==0) {
+	/* creates the p0 */
+	tmp = (double)1.e5;
+	j = cmor_zfactor(zvar_id,axis_id,"p0","Pa",0,NULL,'d',&tmp,NULL);
+	/* creates the "a" */
+	n = cmor_zfactor(zvar_id,axis_id,"a","",ndims,axes_ids,type,values,bounds); /* ok redefined it as a "a" factor */
+	/* ok we need to change the values now */
+	/* first convert p0 to user units */
+	cmor_units = ut_parse(ut_read, "Pa",UT_ASCII);
+	strncpy(local_unit,units,CMOR_MAX_STRING);
+	ut_trim(local_unit,UT_ASCII);
+	user_units = ut_parse(ut_read, local_unit, UT_ASCII);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error parsing units from user: %s",local_unit);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	if (ut_are_convertible(cmor_units,user_units)==0 ) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunuits: Pa and user units (%s) are incompatible",units);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	  cmor_pop_traceback();
+	  return 1;
+	}
+	ut_cmor_converter=ut_get_converter(cmor_units,user_units);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error getting converter from Pa to %s",units);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	tmp = (double) 1.e5;
+	tmp = cv_convert_double(ut_cmor_converter,tmp);
+	/* free units thing */
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error converting units");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	cv_free(ut_cmor_converter);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+	ut_free(cmor_units);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	ut_free(user_units);
+	if (ut_get_status() != UT_SUCCESS) {
+	  snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+	if (values!=NULL) {
+	  n = cmor_axes[axes_ids[0]].length;
+	  for (j=0;j<n;j++)  cmor_vars[*zvar_id].values[j] /= tmp;
+	}
+	if (bounds!=NULL) {
+	  k=-1;
+	  for (n=0;n<=cmor_nvars;n++) if ((strcmp(cmor_vars[n].id,"a_bnds")==0) && (cmor_vars[n].zaxis==axis_id)) {k=n;break;}
+	  n = cmor_axes[axes_ids[0]].length;
+	  for (j=0;j<2*n;j++) cmor_vars[k].values[j] /= tmp;
+	}
+      }
+      else n = cmor_zfactor(zvar_id,axis_id,name,units,ndims,axes_ids,type,values,bounds); 
+    }
+    else if (i==3) { /* atmosphere_sigma_coordinates case */
+      if (strcmp(name,"sigma")==0) {
+	/*ok first we need to make sure we crated the ptop */
+	j=-1;
+	for (n=0;n<=cmor_nvars;n++) if ((strcmp(cmor_vars[n].id,"ptop")==0) && (cmor_vars[n].zaxis==axis_id)) {j=n;break;}
+	if (j==-1) { /* we did not find the ztop! */
+	  snprintf(msg,CMOR_MAX_STRING,"zfactor variable \"ptop\" for zfactor axis: %i is not defined when creating zfactor %s, please define ptop first",axis_id,name);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	tmp = (double) 1.e5;
+	/* creates the p0 */
+	n = cmor_zfactor(zvar_id,axis_id,"p0","Pa",0,NULL,'d',&tmp,NULL);
+	tmp = cmor_vars[j].values[0]; /* stores ptop (in Pa) */
+	/* creates the "a" */
+	n = cmor_zfactor(zvar_id,axis_id,"a","",ndims,axes_ids,type,values,bounds); /* ok redefined it as a "a" factor */
+	if (values!=NULL) {
+	  n = cmor_axes[axes_ids[0]].length;
+	  for (j=0;j<n;j++) cmor_vars[*zvar_id].values[j] = (1.-cmor_vars[*zvar_id].values[j])*tmp/1.e5;
+	}
+	if (bounds!=NULL) {
+	  k=-1;
+	  for (n=0;n<=cmor_nvars;n++) if ((strcmp(cmor_vars[n].id,"a_bnds")==0) && (cmor_vars[n].zaxis==axis_id)) {k=n;break;}
+	  n = cmor_axes[axes_ids[0]].length;
+	  for (j=0;j<2*n;j++) cmor_vars[k].values[j] /= tmp;
+	}
+	/* creates the "b" */
+	n = cmor_zfactor(zvar_id,axis_id,"b","",ndims,axes_ids,type,values,bounds); /* ok redefined it as a "a" factor */
+      }
+      else n = cmor_zfactor(zvar_id,axis_id,name,units,ndims,axes_ids,type,values,bounds); 
+    }
+
+    /* put back input type */
+    cmor_axes[axis_id].hybrid_in = i;
+
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_update_history(int var_id,char *add){
+  struct tm *ptr;
+  time_t lt;
+  char date[CMOR_MAX_STRING];
+  char tmp[CMOR_MAX_STRING];
+  char tmp2[CMOR_MAX_STRING];
+
+  /* first figures out time */
+  cmor_add_traceback("cmor_update_history");
+  lt = time(NULL);
+  ptr = gmtime(&lt);
+  snprintf(date,CMOR_MAX_STRING,"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);
+  if (cmor_has_variable_attribute(var_id,"history")==0) {
+    cmor_get_variable_attribute(var_id,"history",&tmp[0]);
+  }
+  else {
+    tmp[0]='\0';
+  }
+  snprintf(tmp2,CMOR_MAX_STRING,"%s %s altered by CMOR: %s.",tmp,date,add);
+  cmor_set_variable_attribute(var_id,"history",'c',tmp2);
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_variable(int *var_id, char *name, char *units, int ndims, int axes_ids[], char type, void *missing, double *tolerance, char *positive, char*original_name, char *history, char *comment) 
+{
+  extern int cmor_nvars,cmor_naxes;
+  extern int CMOR_TABLE;
+  extern cmor_var_t cmor_vars[];
+  int i,iref,j,k,ierr,l;
+  char msg[CMOR_MAX_STRING];
+  char ctmp[CMOR_MAX_STRING];
+  cmor_var_def_t refvar;
+  int laxes_ids[CMOR_MAX_DIMENSIONS];
+  int grid_id=1000;
+  int lndims,olndims;
+  float afloat;
+  int aint;
+  long along;
+  int did_grid_reorder=0;
+  int vrid;
+
+  cmor_add_traceback("cmor_variable");
+  cmor_is_setup();
+
+  if (CMOR_TABLE==-1) {
+    cmor_handle_error("You did not define a table yet!",CMOR_CRITICAL);
+  }
+
+  if (cmor_nvars==CMOR_MAX_VARIABLES-1) { 
+    cmor_handle_error("Too many variables defined",CMOR_CRITICAL);
+    cmor_pop_traceback();
+    return 1;
+  }
+
+
+
+  /* ok now look which variable is corresponding in table if not found then error */
+  iref=-1;
+  cmor_trim_string(name,ctmp);
+  for (i=0;i<cmor_tables[CMOR_TABLE].nvars+1;i++) {
+    if (strcmp(cmor_tables[CMOR_TABLE].vars[i].id,ctmp)==0) { iref=i;break;}
+  }
+  if (iref==-1) {
+    snprintf(msg,CMOR_MAX_STRING,"Could not find a matching variable for name: '%s'",ctmp);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  /*printf("ok your variable is actually variable %i in table %i\n",iref,CMOR_TABLE);*/
+  refvar=cmor_tables[CMOR_TABLE].vars[iref];
+  for (i=0;i<CMOR_MAX_VARIABLES;i++) {
+    if (cmor_vars[i].self==-1) {
+      vrid=i;
+      break;
+    }
+  }
+
+  if (vrid>cmor_nvars) cmor_nvars=vrid;
+  //vrid = cmor_nvars;
+
+  cmor_vars[vrid].ref_table_id=CMOR_TABLE;
+  cmor_vars[vrid].ref_var_id=iref;
+
+  /* init some things */
+  strcpy(cmor_vars[vrid].suffix,"");
+  strcpy(cmor_vars[vrid].base_path,"");
+  strcpy(cmor_vars[vrid].current_path,"");
+  cmor_vars[vrid].suffix_has_date=0;
+
+  /*output missing value */
+  cmor_vars[vrid].omissing = (double) cmor_tables[CMOR_TABLE].missing_value;
+
+  /* copying over values from ref var */
+  cmor_vars[vrid].valid_min = refvar.valid_min;
+  cmor_vars[vrid].valid_max = refvar.valid_max;
+  cmor_vars[vrid].ok_min_mean_abs = refvar.ok_min_mean_abs;
+  cmor_vars[vrid].ok_max_mean_abs = refvar.ok_max_mean_abs;
+  cmor_vars[vrid].shuffle = refvar.shuffle;
+  cmor_vars[vrid].deflate = refvar.deflate;
+  cmor_vars[vrid].deflate_level = refvar.deflate_level;
+  /*printf("going in vrid is: %i\n",vrid);*/
+  if (refvar.out_name[0]=='\0') {
+    strncpy(cmor_vars[vrid].id,name,CMOR_MAX_STRING);
+  }
+  else {
+    strncpy(cmor_vars[vrid].id,refvar.out_name,CMOR_MAX_STRING);
+  }
+
+  cmor_set_variable_attribute(vrid,"standard_name",'c',refvar.standard_name);
+  cmor_set_variable_attribute(vrid,"long_name",'c',refvar.long_name);
+  if ((refvar.flag_values!=NULL) && (refvar.flag_values[0]!='\0')) {
+    cmor_set_variable_attribute(vrid,"flag_values",'c',refvar.flag_values);
+  }
+  if ((refvar.flag_meanings!=NULL) && (refvar.flag_meanings[0]!='\0')) {
+    cmor_set_variable_attribute(vrid,"flag_meanings",'c',refvar.flag_meanings);
+  }
+/*   cmor_set_variable_attribute(vrid,"realm",'c',refvar.realm); */
+  cmor_set_variable_attribute(vrid,"comment",'c',refvar.comment);
+  if (strcmp(refvar.units,"?")==0) {
+    strncpy(cmor_vars[vrid].ounits,units,CMOR_MAX_STRING);
+  }
+  else {
+    strncpy(cmor_vars[vrid].ounits,refvar.units,CMOR_MAX_STRING);
+  }
+  cmor_set_variable_attribute(vrid,"units",'c',cmor_vars[vrid].ounits);
+  strncpy(cmor_vars[vrid].iunits,units,CMOR_MAX_STRING);
+  if ((original_name!=NULL) && (original_name[0]!='\0')) cmor_set_variable_attribute(vrid,"original_name",'c',original_name);
+  if ((history!=NULL) && (history[0]!='\0')) cmor_set_variable_attribute(vrid,"history",'c',history);
+  if ((comment!=NULL) && (comment[0]!='\0')) {
+    if (cmor_has_variable_attribute(vrid,"comment")==0) {
+      
+      strncpy(msg,comment,CMOR_MAX_STRING);
+      strncat(msg,", ",CMOR_MAX_STRING-strlen(msg));
+      strncat(msg,cmor_tables[cmor_vars[vrid].ref_table_id].project_id,CMOR_MAX_STRING-strlen(msg));
+      strncat(msg,"_table_comment: ",CMOR_MAX_STRING-strlen(msg));
+      strncat(msg,refvar.comment,CMOR_MAX_STRING-strlen(msg));
+    }
+    else {
+      strncpy(msg,comment,CMOR_MAX_STRING);
+    }
+    cmor_set_variable_attribute(vrid,"comment",'c',msg);
+  }
+  if (strcmp(units,refvar.units)!=0) {
+    cmor_set_variable_attribute(vrid,"original_units",'c',units);
+    snprintf(msg,CMOR_MAX_STRING,"Converted units from '%s' to '%s'",units,refvar.units);
+    cmor_update_history(vrid,msg);
+  }
+  cmor_set_variable_attribute(vrid,"cell_methods",'c',refvar.cell_methods);
+  cmor_set_variable_attribute(vrid,"cell_measures",'c',refvar.cell_measures);
+  /*if ((refvar.positive!='\0') && (positive!=NULL) && (positive[0]!=refvar.positive)) cmor_vars[vrid].sign=-1;*/
+  if ((positive!=NULL) && (positive[0]!='\0')) {
+    if ((positive[0]!='d') && positive[0]!='u') {
+      snprintf(msg,CMOR_MAX_STRING,"variable '%s': unknown value for positive : %s (only first character is considered, which was: %c)",cmor_vars[vrid].id,positive,positive[0]);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (refvar.positive=='u') {
+      if (cmor_is_required_variable_attribute(refvar,"positive")==0) cmor_set_variable_attribute(vrid,"positive",'c',"up");
+      if (positive[0]!='u') cmor_vars[vrid].sign=-1;
+      cmor_update_history(vrid,"Changed sign");
+    }
+    else if (refvar.positive=='d') {
+      if (cmor_is_required_variable_attribute(refvar,"positive")==0) cmor_set_variable_attribute(vrid,"positive",'c',"down");
+      if (positive[0]!='d') cmor_vars[vrid].sign=-1;
+      cmor_update_history(vrid,"Changed sign");
+    }
+    else { 
+      snprintf(msg,CMOR_MAX_STRING,"variable '%s' you passed positive value:%s, but table does not mention it, will be ignored, if you really want this in your variable output use cmor_set_variable_attribute function",cmor_vars[vrid].id,positive); 
+      cmor_handle_error(msg,CMOR_WARNING);
+    }
+  }
+  else {
+    if (cmor_is_required_variable_attribute(refvar,"positive")==0) {
+	snprintf(msg,CMOR_MAX_STRING,"you need to provide the 'positive' argument for variable: %s",cmor_vars[vrid].id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+    if (refvar.positive!='\0') {
+      if (refvar.positive=='u') {
+	if (cmor_is_required_variable_attribute(refvar,"positive")==0) cmor_set_variable_attribute(vrid,"positive",'c',"up");
+	snprintf(msg,CMOR_MAX_STRING,"you did not provide the 'positive' argument for variable: %s",cmor_vars[vrid].id);
+      }
+      else if (refvar.positive=='d') {
+	if (cmor_is_required_variable_attribute(refvar,"positive")==0) cmor_set_variable_attribute(vrid,"positive",'c',"down");
+	snprintf(msg,CMOR_MAX_STRING,"you did not provide the 'positive' argument for variable: %s",cmor_vars[vrid].id);
+      }
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  /* before anything we copy axes_ids into laxes_ids */
+  for (i=0;i<ndims;i++) {
+    laxes_ids[i] = axes_ids[i];
+    /* printf("%s: axes[%i] = %i\n",cmor_vars[vrid].id,i,laxes_ids[i]); */
+  }
+  lndims=ndims;
+  aint=0; /* just to know if we deal with  a grid */
+  /* ok we need to replace grids definitions with the grid axes */
+  for (i=0;i<ndims;i++) {
+    if (laxes_ids[i]<-9) { /* grid definition */
+      grid_id = -laxes_ids[i]-10;
+      /* here we need to know if the refvar has been defined with lat/lon or in the grid space */
+      k=0;
+      for (j=0;j<refvar.ndims;j++) {
+	if (strcmp(cmor_tables[refvar.table_id].axes[refvar.dimensions[j]].id,"longitude")==0) k++;
+	if (strcmp(cmor_tables[refvar.table_id].axes[refvar.dimensions[j]].id,"latitude")==0) k++;
+	if (refvar.dimensions[j]==-10) k++;
+      }
+      if (k==2) { 
+	aint = cmor_grids[grid_id].ndims-2; /* basically replaces the lat/lon with the number of dims in our grid */
+      }
+      cmor_vars[vrid].grid_id = grid_id;
+      k = cmor_grids[grid_id].ndims-1;
+      /* first move everything to the right */
+      for (j=lndims-1;j>=i;j--) laxes_ids[j+k] = laxes_ids[j];
+      /* ok now we need to insert the grid dimensions */
+      lndims +=k;
+      for (j=0;j<cmor_grids[grid_id].ndims;j++) {
+	laxes_ids[i+j] = cmor_grids[grid_id].original_axes_ids[j];
+      }
+    }
+  }
+  /* for(i=0;i<refvar.ndims;i++) fprintf(stderr,"after the grid id section: %i, id: %i\n",i,laxes_ids[i]); */
+  olndims = lndims;
+  if (refvar.ndims+aint!=lndims) {
+    lndims=0;
+    /* ok before we panic we check if there is a "dummy" dim */
+    j=refvar.ndims-ndims+aint;
+    for (i=0;i<refvar.ndims;i++) {
+/*       printf("ok none matchng # of dims, i: %d, id: %s, value: %lf, lndims is: %d\n",i,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].id,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].value,olndims); */
+      if (cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].value!=1.e20) {
+	/* ok it could be a dummy but we need to check if the user already defined this dummy dimension or not */
+	l=-1;
+	for (k=0;k<olndims;k++) {
+	  if (cmor_has_axis_attribute(laxes_ids[k],"standard_name")==0) {
+	      cmor_get_axis_attribute(laxes_ids[k],"standard_name",'c',&msg);
+	    }
+	    else {
+	      strcpy(msg,"nope");
+	    }
+	  /* printf("k: %d, axes_id: %d, stdnm: %s, ref stdnm: %s\n",k,laxes_ids[k],msg,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].standard_name); */
+	  if (strcmp(msg,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].standard_name)==0) {
+	    /* ok user did define this one on its own */
+	    l=k;
+	    break;
+	  }
+	}
+	if (l==-1) { /* ok it is a singleton dimension */
+	  j-=1;
+	  /* ok then we create a dummy axis that we will add at the end of the axes */
+	  if (cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].bounds_value[0]!=1.e20) {
+	    ierr = cmor_axis(&k,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].id,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].units,1,&cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].value,'d',&cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].bounds_value[0],2,"");
+	  }
+	  else {
+	    ierr = cmor_axis(&k,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].id,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].units,1,&cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].value,'d',NULL,0,"");
+	  }
+	  laxes_ids[ndims+lndims]=k;
+	  lndims+=1;
+	}
+      }
+    }
+    if (j!=0) {
+      snprintf(msg,CMOR_MAX_STRING,"You are defining variable '%s' with %i dimensions, when it should have %i",name,ndims,refvar.ndims);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    else {
+      lndims += ndims;
+    }
+  }
+  /* At that point we need to check that the dims we passed match what's in the refvar */
+  k=-1;
+  for (i=0;i<lndims;i++) {
+    for (j=0;j<refvar.ndims;j++) {
+      if ((strcmp(cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].id,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[j]].id)==0) ||((cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].axis=='Z') && (refvar.dimensions[j]==-2))){ 
+/* || ((cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].axis==cmor_tables[CMOR_TABLE].axes[refvar.dimensions[j]].axis) && cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].axis!='\0'))  { */
+	k++;
+      }
+    }
+    if (k!=i) {
+      /* ok we didn't find it, but there is still a slight chance it is a grid axis! */
+      for (j=0;j<cmor_grids[grid_id].ndims;j++) {
+	if (laxes_ids[i]==cmor_grids[grid_id].original_axes_ids[j]) k++;
+      }
+    }
+    if (k!=i) {
+      snprintf(msg,CMOR_MAX_STRING,"You defined variable '%s' with axis id '%s' which is not part of this variable according to your table, it says: ( ",refvar.id,cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].id);
+      for (i=0;i<refvar.ndims;i++) {
+	strcat(msg,cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].id);
+	strcat(msg," ");
+      }
+      strcat(msg,")");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  k=0;
+  /* ok now loop thru axes */    
+/*   printf("lndims is: %i\n",lndims); */
+  for (i=0;i<lndims;i++) { 
+    if (laxes_ids[i]>cmor_naxes) {
+      snprintf(msg,CMOR_MAX_STRING,"Axis %i not defined",axes_ids[i]);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    if (cmor_axes[laxes_ids[i]].ref_table_id!=CMOR_TABLE && cmor_axes[laxes_ids[i]].isgridaxis!=1) {
+      snprintf(msg,CMOR_MAX_STRING,"You are passing axis %i (named %s) which has been defined using table %i (%s) but the current table is %i (%s) (and isgridaxis says: %i)",laxes_ids[i],cmor_axes[laxes_ids[i]].id,cmor_axes[laxes_ids[i]].ref_table_id,cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].table_id,CMOR_TABLE,cmor_tables[CMOR_TABLE].table_id,cmor_axes[laxes_ids[i]].isgridaxis);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    if (cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].value != 1.e20) {
+      /*singleton dim */
+      snprintf(msg,CMOR_MAX_STRING,"Treated scalar dimension: '%s'",cmor_axes[laxes_ids[i]].id);
+      cmor_update_history(vrid,msg);
+      cmor_vars[vrid].singleton_ids[i-k]=laxes_ids[i];
+      if (cmor_has_variable_attribute(vrid,"coordinates")==0) {
+	cmor_get_variable_attribute(vrid,"coordinates",&msg[0]);
+      }
+      else {
+	strncpy(msg,"",CMOR_MAX_STRING);
+      }
+      if (cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].out_name[0]=='\0') {
+	snprintf(ctmp,CMOR_MAX_STRING,"%s %s",msg,cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].id);
+      }
+      else {
+	snprintf(ctmp,CMOR_MAX_STRING,"%s %s",msg,cmor_tables[cmor_axes[laxes_ids[i]].ref_table_id].axes[cmor_axes[laxes_ids[i]].ref_axis_id].out_name);
+      }
+      cmor_set_variable_attribute(vrid,"coordinates",'c',&ctmp[0]);
+    }
+    else {
+      cmor_vars[vrid].original_order[k]=laxes_ids[i];
+      k++;
+    }
+  }
+  /* Now figures out the real order... */
+  k=0;
+
+
+  for (i=0;i<lndims;i++) { 
+    if (((strcmp(cmor_tables[refvar.table_id].axes[refvar.dimensions[i]].id,"latitude")==0) ||
+	 (strcmp(cmor_tables[refvar.table_id].axes[refvar.dimensions[i]].id,"longitude")==0) ) &&
+	(grid_id!=1000) ) {
+      /* ok we are  dealing with a "grid" type of data */
+      if (did_grid_reorder !=0 ) continue;
+      for (j=0;j<cmor_grids[grid_id].ndims;j++) {
+	cmor_vars[vrid].axes_ids[k]=cmor_grids[grid_id].axes_ids[j];
+	k++;
+      }
+      did_grid_reorder = 1;
+    }
+    else if ((refvar.dimensions[i]==-2) || (cmor_tables[CMOR_TABLE].axes[refvar.dimensions[i]].value == 1.e20)) { /* not a singleton dim */
+      iref=-1;
+      for (j=0;j<lndims;j++) {
+	if (refvar.dimensions[i]==cmor_axes[laxes_ids[j]].ref_axis_id) {
+	  cmor_vars[vrid].axes_ids[k]=laxes_ids[j];
+	}
+	/* -2 means it is a zaxis */
+	if (refvar.dimensions[i]==-2) {
+	  if (cmor_axes[axes_ids[j]].axis=='Z') cmor_vars[vrid].axes_ids[i]=laxes_ids[j];
+	}
+      }
+      k++;
+    }
+    else if (refvar.dimensions[i]==-10) {
+      /* ok this is either a lat/lon */
+      for(j=0;j<ndims;j++) if (axes_ids[j]<-9) break;
+      l=j;
+      for (j=0;j<cmor_grids[grid_id].ndims;j++) {
+	cmor_vars[vrid].axes_ids[k]=cmor_grids[grid_id].axes_ids[j];
+	k++;
+	i++;
+      }
+      i--; /* one too many i adds */
+    }
+  }
+
+  cmor_vars[vrid].ndims=k;
+  cmor_vars[vrid].itype=type;
+  k=0;
+
+  for (i=0;i<cmor_vars[vrid].ndims;i++) if (cmor_vars[vrid].original_order[i]!=cmor_vars[vrid].axes_ids[i]) k=-1;
+  if (k==-1) {
+    /* printf("reordered: "); */
+    strncpy(msg,"Reordered dimensions, original order:",CMOR_MAX_STRING);
+    for (i=0;i<cmor_vars[vrid].ndims;i++) {
+      snprintf(ctmp,CMOR_MAX_STRING," %s",cmor_axes[cmor_vars[vrid].original_order[i]].id);
+      /* printf(" %s",cmor_axes[cmor_vars[vrid].original_order[i]].id); */
+      strncat(msg,ctmp,CMOR_MAX_STRING-strlen(ctmp));
+    }
+    /* printf("\n"); */
+    cmor_update_history(vrid,msg);
+  }
+/*   printf("Original/Final order: "); */
+/*   for (i=0;i<cmor_vars[vrid].ndims;i++) { */
+/*     printf(" %s/%s",cmor_axes[cmor_vars[vrid].original_order[i]].id,cmor_axes[cmor_vars[vrid].axes_ids[i]].id); */
+/*   } */
+/*   printf("\n"); */
+  if (refvar.type=='\0') cmor_vars[vrid].type='f';
+  else cmor_vars[vrid].type=refvar.type;
+  if (missing != NULL) {
+    cmor_vars[vrid].nomissing = 0;/*printf("ok missing was not NULL pointer\n");}*/
+    if (type=='i') cmor_vars[vrid].missing = (double)*(int *)missing;
+    if (type=='l') cmor_vars[vrid].missing = (double)*(long *)missing;
+    if (type=='f') cmor_vars[vrid].missing = (double)*(float *)missing;
+    if (type=='d') cmor_vars[vrid].missing = (double)*(double *)missing;
+    if (cmor_vars[vrid].missing!=cmor_vars[vrid].omissing) {
+      snprintf(msg,CMOR_MAX_STRING,"replaced missing value flag (%g) with standard missing value (%g)",cmor_vars[vrid].missing,cmor_vars[vrid].omissing);
+      cmor_update_history(vrid,msg);
+    }
+    if (refvar.type=='d') {
+      cmor_set_variable_attribute(vrid,"missing_value",'d',&cmor_vars[vrid].omissing);
+      cmor_set_variable_attribute(vrid,"_FillValue",'d',&cmor_vars[vrid].omissing);
+    }
+    else if (refvar.type=='f') {
+      afloat = (float)cmor_vars[vrid].omissing;
+      cmor_set_variable_attribute(vrid,"missing_value",'f',&afloat);
+      cmor_set_variable_attribute(vrid,"_FillValue",'f',&afloat);
+    }
+    else if (refvar.type=='l') {
+      along = (long)cmor_vars[vrid].omissing;
+      cmor_set_variable_attribute(vrid,"missing_value",'l',&along);
+      cmor_set_variable_attribute(vrid,"_FillValue",'l',&along);
+    }
+    else if (refvar.type=='i') {
+      aint = (int)cmor_vars[vrid].omissing;
+      cmor_set_variable_attribute(vrid,"missing_value",'i',&aint);
+      cmor_set_variable_attribute(vrid,"_FillValue",'i',&aint);
+    }
+  }
+
+  /*printf("assiging %i to na\n",vrid);*/
+  cmor_vars[vrid].tolerance = 1.e-4;
+  cmor_vars[vrid].self=vrid;
+  if (tolerance!=NULL) cmor_vars[vrid].tolerance = (double)*(double *)tolerance;
+  *var_id=vrid;
+  cmor_pop_traceback();
+  return 0;
+};
+
+void cmor_init_var_def(cmor_var_def_t *var, int table_id)
+{
+  int n;
+  cmor_is_setup();
+  var->table_id=table_id;
+  var->standard_name[0]='\0';
+  var->units[0]='\0';
+  var->cell_methods[0]='\0';
+  var->cell_measures[0]='\0';
+  var->positive='\0';
+  var->long_name[0]='\0';
+  var->comment[0]='\0';
+  var->realm[0]='\0';
+  var->frequency[0]='\0';
+  var->out_name[0]='\0';
+  var->ndims=0;
+  var->flag_values[0]='\0';
+  var->flag_meanings[0]='\0';
+  for(n=0;n<CMOR_MAX_DIMENSIONS;n++) var->dimensions[n]=-1;
+  var->type='f';
+  var->valid_min=1.e20; /* means no check */
+  var->valid_max=1.e20;
+  var->ok_min_mean_abs=1.e20;
+  var->ok_max_mean_abs=1.e20;
+  var->shuffle=0;
+  var->deflate=1;
+  var->deflate_level=1;
+}
+
+int cmor_set_var_def_att(cmor_var_def_t *var,char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] ){
+  int i,n,j,n0;
+  char dim[CMOR_MAX_STRING];
+  char msg[CMOR_MAX_STRING];
+
+  cmor_add_traceback("cmor_set_var_def_att");
+  cmor_is_setup();
+  if (strcmp(att,"required")==0) {
+    strncpy(var->required,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"id")==0) {
+    strncpy(var->id,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"standard_name")==0) {
+    strncpy(var->standard_name,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"long_name")==0) {
+    strncpy(var->long_name,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"comment")==0) {
+    strncpy(var->comment,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"dimensions")==0) {
+    n0=strlen(val);
+    for (i=0;i<n0;i++) {
+      j=0;
+      while((i<n0)&&((val[i]!=' ')&&val[i]!='\0')) { dim[j]=val[i] ; j++ ; i++ ;}
+      dim[j]='\0';
+      if (var->ndims > CMOR_MAX_DIMENSIONS) {
+	snprintf(msg,CMOR_MAX_STRING,"Too many dimensions (%i) defined for variable (%s), max is: %i",var->ndims,var->id,CMOR_MAX_DIMENSIONS);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      /* check that the dimension as been defined in the table */
+      n=-1; /* not found yet */
+      for (j=0;j<=cmor_tables[var->table_id].naxes;j++) {
+	if (strcmp(dim,cmor_tables[var->table_id].axes[j].id)==0) {n=j;break;}
+      }
+      if (n==-1) {
+	if ((strcmp("zlevel",dim)==0)||(strcmp("olevel",dim)==0)||(strcmp("alevel",dim)==0)) {
+	  /* printf("ignoring zlevel for now\n");*/
+	  var->dimensions[var->ndims]=-2;
+	}
+	else {
+	  if ((strcmp(dim,"longitude")!=0) && strcmp(dim,"latitude")!=0) { /* do not raise a warning if the axis is "longitude" / "latitude" it is probably a grid variable */
+	  snprintf(msg,CMOR_MAX_STRING,"Reading table: axis name: '%s' for variable: '%s' is not defined in table. Table defines dimensions: '%s' for this variable",dim,var->id,val);cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	  else {
+	    var->dimensions[var->ndims]=-10;
+	  }
+	}
+      }
+      else {
+	var->dimensions[var->ndims]=n;
+      }
+      var->ndims++;
+    }
+    /* revert to put in C order */
+    for (i=0;i<var->ndims/2;i++) {
+      n=var->dimensions[i];
+      var->dimensions[i]=var->dimensions[var->ndims-1-i];
+      var->dimensions[var->ndims-1-i]=n;
+    }
+    /*for (i=0;i<var->ndims;i++) printf("%s dimension %i: %s\n",var->id,i,cmor_tables[var->table_id].axes[var->dimensions[i]].id);*/
+  }
+  else if (strcmp(att,"units")==0) {
+    strncpy(var->units,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"cell_methods")==0) {
+    strncpy(var->cell_methods,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"cell_measures")==0) {
+    strncpy(var->cell_measures,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"positive")==0) {
+    var->positive=val[0];
+  }
+  else if (strcmp(att,"type")==0) {
+    if (strcmp(val,"real")==0) var->type='f';
+    else if (strcmp(val,"double")==0) var->type='d';
+    else if (strcmp(val,"integer")==0) var->type='i';
+    else if (strcmp(val,"long")==0) var->type='l';
+  }
+  else if (strcmp(att,"valid_min")==0) {
+    var->valid_min = atof(val);
+  }
+  else if (strcmp(att,"valid_max")==0) {
+    var->valid_max = atof(val);
+  }
+  else if (strcmp(att,"ok_min_mean_abs")==0) {
+    var->ok_min_mean_abs=atof(val);
+  }
+  else if (strcmp(att,"ok_max_mean_abs")==0) {
+    var->ok_max_mean_abs = atof(val);
+  }
+  else if (strcmp(att,"shuffle")==0) {
+    var->shuffle = atoi(val);
+    if (atoi(val)!=0) {
+      if (USE_NETCDF_4 == 0) {
+	sprintf(msg,"Reading a table that calls for NetCDF4 features, you are using NetCDF3 library");
+	cmor_handle_error(msg,CMOR_WARNING);
+      }
+      else if ( (CMOR_NETCDF_MODE == CMOR_APPEND_3) ||
+		(CMOR_NETCDF_MODE == CMOR_REPLACE_3) ||
+		(CMOR_NETCDF_MODE == CMOR_PRESERVE_3)) {
+	sprintf(msg,"Reading a table that calls for NetCDF4 features, you asked for NetCDF3 features");
+	cmor_handle_error(msg,CMOR_WARNING);
+      }
+    }
+  }
+  else if (strcmp(att,"deflate")==0) {
+    var->deflate = atoi(val);
+    if (atoi(val)!=0) {
+      if (USE_NETCDF_4 == 0) {
+	sprintf(msg,"Reading a table that calls for NetCDF4 features, you are using NetCDF3 library");
+	cmor_handle_error(msg,CMOR_WARNING);
+      }
+      else if ( (CMOR_NETCDF_MODE == CMOR_APPEND_3) ||
+		(CMOR_NETCDF_MODE == CMOR_REPLACE_3) ||
+		(CMOR_NETCDF_MODE == CMOR_PRESERVE_3)) {
+	sprintf(msg,"Reading a table that calls for NetCDF4 features, you asked for NetCDF3 features");
+	cmor_handle_error(msg,CMOR_WARNING);
+      }
+    }
+  }
+  else if (strcmp(att,"deflate_level")==0) {
+    var->deflate_level = atoi(val);
+  }
+  else if (strcmp(att,"modeling_realm")==0) {
+    strncpy(var->realm,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"frequency")==0) {
+    strncpy(var->frequency,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"flag_values")==0) {
+    strncpy(var->flag_values,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"flag_meanings")==0) {
+    strncpy(var->flag_meanings,val,CMOR_MAX_STRING);
+  }
+  else if (strcmp(att,"out_name")==0) {
+    strncpy(var->out_name,val,CMOR_MAX_STRING);
+  }
+  else {
+    snprintf(msg,CMOR_MAX_STRING,"unknown variable attribute: >>>>%s<<<< value: (%s)",att,val);
+    cmor_handle_error(msg,CMOR_WARNING);
+  }
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_get_variable_time_length(int *var_id, int *length) {
+  cmor_var_t avar;
+  int i;
+
+  *length=0;
+  avar = cmor_vars[*var_id];
+  for (i=0;i<avar.ndims;i++) {
+    if (cmor_axes[avar.original_order[i]].axis=='T') *length=cmor_axes[avar.original_order[i]].length;
+  }
+
+/*   if (*length == -1) { */
+/*     snprintf(msg,CMOR_MAX_STRING,"trying to retrieve length of time axis for variable %s but this variable does not have a time axis",avar.id); */
+/*     cmor_handle_error(msg,CMOR_CRITICAL); */
+/*   } */
+  return 0;
+}
+    
+
+int cmor_get_original_shape(int *var_id, int *shape_array, int *rank, int blank_time) {
+  int i;
+  cmor_var_t avar;
+  char msg[CMOR_MAX_STRING];
+  cmor_add_traceback("cmor_get_original_shape");
+  avar = cmor_vars[*var_id];
+  for(i=0;i<*rank;i++) shape_array[i]=-1; /* init array */
+
+  if (*rank<avar.ndims) {
+	  snprintf(msg,CMOR_MAX_STRING,"trying to retrieve shape of variable %s into a %id array but this variable is %id",avar.id,*rank,avar.ndims);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  for (i=0;i<avar.ndims;i++) {
+    if ((blank_time==1) && (cmor_axes[avar.original_order[i]].axis=='T')) {
+      shape_array[i]=0;
+    }
+    else {
+      shape_array[i]=cmor_axes[avar.original_order[i]].length;
+    }
+  }
+  
+  /*   for(i=0;i<avar.ndims;i++) printf("var order: %i, %i\n",i,cmor_axes[avar.original_order[i]].length); */
+  /*   for(i=0;i<*rank;i++) printf("returning: %i, %i\n",i,shape_array[i]); */
+  cmor_pop_traceback();
+  return 0;
+}
+
+int cmor_write_var_to_file(int ncid,cmor_var_t *avar,void *data,char itype, int ntimes_passed, double *time_vals, double *time_bounds){
+  size_t counts[CMOR_MAX_DIMENSIONS];
+  size_t counts2[CMOR_MAX_DIMENSIONS];
+  int counter[CMOR_MAX_DIMENSIONS];
+  int counter_orig[CMOR_MAX_DIMENSIONS];
+  int counter_orig2[CMOR_MAX_DIMENSIONS];
+  int counter2[CMOR_MAX_DIMENSIONS];
+  size_t starts[CMOR_MAX_DIMENSIONS];
+  int nelements,loc,add,nelts;
+  double *data_tmp=NULL, tmp=0., tmp2,amean;
+  int *idata_tmp=NULL;
+  long *ldata_tmp=NULL;
+  float *fdata_tmp=NULL;
+  char mtype;
+  int i,j,ierr=0,dounits=1;
+  char msg[CMOR_MAX_STRING];
+  char msg2[CMOR_MAX_STRING];
+  double *tmp_vals;
+  ut_unit *user_units=NULL, *cmor_units=NULL;
+  cv_converter *ut_cmor_converter=NULL;
+  char local_unit[CMOR_MAX_STRING];
+  int n_lower_min=0,n_greater_max=0;
+  char msg_min[CMOR_MAX_STRING];
+  char msg_max[CMOR_MAX_STRING];
+  extern ut_system *ut_read;  
+
+  cmor_add_traceback("cmor_write_var_to_file");
+  cmor_is_setup();
+
+/*   type = avar->itype; /\* stores input type for variable *\/ */
+
+  if (strcmp(avar->ounits,avar->iunits)==0) dounits=0;
+  mtype = avar->type;
+  /* This counts how many elements there is in each dimension and the total number of elements written at this time */
+  /* This needs to be passed to NetCDF */
+  /* do we have times ? */
+  if (ntimes_passed!=0) {
+    counts[0]=ntimes_passed;
+    if (cmor_axes[avar->axes_ids[0]].axis!='T') {     
+      snprintf(msg,CMOR_MAX_STRING,"you are passing %i time steps for a static variable (no time dimension), please pass 0 (zero) as the number of times", ntimes_passed);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  else {
+    /* need to determine if it is a static variable */
+    if (avar->ndims>0) counts[0] = cmor_axes[avar->axes_ids[0]].length;
+    else counts[0]=1;
+  }
+  nelements = counts[0];
+  for (i=1;i<avar->ndims;i++) {
+    counts[i]=cmor_axes[avar->axes_ids[i]].length;
+    nelements = nelements*counts[i];
+  }
+  if (avar->isbounds==1) nelements*=2;
+/*   printf("we detected: %i elts over %i dims\n",nelements,avar->ndims); */
+  /* This section counts how many elements are needed before you increase the index in each dimension */
+  counter[avar->ndims]=1; /* dummy */
+  counter_orig[avar->ndims]=1; /*dummy */
+  for (i=avar->ndims-1;i>=0;i--) {
+    /* we need to do this for the order in which we will write and the order the user defined its variable */
+    if (cmor_axes[avar->axes_ids[i]].axis!='T') counter[i]=cmor_axes[avar->axes_ids[i]].length*counter[i+1];
+    else counter[i]=counts[0]*counter[i+1];
+    if (cmor_axes[avar->original_order[i]].axis!='T') counter_orig[i]=cmor_axes[avar->original_order[i]].length*counter_orig[i+1];
+    else counter_orig[i]=counts[0]*counter_orig[i+1];
+  }
+  /* Now we need to map, i.e going ahead by 2 eleemnts of final array eq going ahaead of n elements originally */
+  for (i=0;i<avar->ndims;i++) {
+    for (j=0;j<avar->ndims;j++) {
+      if (avar->axes_ids[i]==avar->original_order[j]) counter_orig2[i]=counter_orig[j+1];
+    }
+  }
+/*   for (i=0;i<avar->ndims;i++) {printf("i: %d, id: %s, length: %d, counter: %d, counter_orig: %d, counter_orig2: %d\n",i,cmor_axes[avar->axes_ids[i]].id,cmor_axes[avar->axes_ids[i]].length,counter[i],counter_orig[i],counter_orig2[i]);} */
+
+
+  /* Allocates the memory to store data to be written after reordering and scaling/offsetting */
+  /* needs to figure out if we need to touch the variable... */
+  if (mtype=='i') {
+    idata_tmp = malloc(sizeof(int)*nelements);
+    if (idata_tmp == NULL )  {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_write_var_to_file: cannot allocate memory for %i int tmp elts var '%s'",nelements,avar->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+  }
+  else if (mtype=='l') {
+    ldata_tmp = malloc(sizeof(long)*nelements);
+    if (ldata_tmp == NULL)   {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_write_var_to_file: cannot allocate memory for %i long tmp elts var '%s'",nelements,avar->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+  }
+  else if (mtype=='d') {
+   data_tmp = malloc(sizeof(double)*nelements);
+    if (data_tmp == NULL)   {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_write_var_to_file: cannot allocate memory for %i double tmp elts var '%s'",nelements,avar->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+  }
+  else {
+    fdata_tmp = malloc(sizeof(float)*nelements);
+    if (fdata_tmp == NULL)   {
+	snprintf(msg,CMOR_MAX_STRING,"cmor_write_var_to_file: cannot allocate memory for %i float tmp elts var '%s'",nelements,avar->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+  }
+
+  /* Reorder data, applies scaling, etc... */
+  if (dounits==1) {
+    strncpy(local_unit,avar->ounits,CMOR_MAX_STRING);
+    ut_trim(local_unit,UT_ASCII);
+    cmor_units = ut_parse(ut_read, local_unit,UT_ASCII);
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING,"in udunits analyzing units from cmor table (%s)",local_unit );
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    strncpy(local_unit,avar->iunits,CMOR_MAX_STRING);
+    ut_trim(local_unit,UT_ASCII);
+    user_units = ut_parse(ut_read, local_unit, UT_ASCII);
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING," in udunits analyzing units from user (%s)",local_unit);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    if (ut_are_convertible(cmor_units,user_units)==0 ) {
+      snprintf(msg,CMOR_MAX_STRING,"variable: %s, cmor and user units are incompatible: %s and %s",avar->id,avar->ounits,avar->iunits);
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+    ut_cmor_converter=ut_get_converter(user_units,cmor_units);
+    if (ut_get_status() != UT_SUCCESS ) {
+      snprintf(msg,CMOR_MAX_STRING," in udunits, getting converter");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+      cmor_pop_traceback();
+      return 1;
+    }
+  }
+  amean = 0.;
+  nelts = 0;
+  for (i=0;i<nelements;i++) {
+    loc = i;
+/*     printf("i: %i (",i); */
+    /* first figures out the coeff in final order */
+    /* puts the result in counter2 */
+    for (j=0;j<avar->ndims;j++) {
+      counter2[j] = (int)loc/(int)counter[j+1];
+      /* this is the reverse part */
+      /* doing it this way to avoid if test */
+      loc = loc - counter2[j]*counter[j+1];
+/*       printf(" %i: %i,",j,counter2[j]); */
+    }
+/*     printf(")\n"); */
+    /* now figures out what these indices meant in the original order */
+    loc = 0;
+    for (j=0;j<avar->ndims;j++) {
+      /* revert and offsetting done automatically */
+      /* next 2 commented out lines are for no reverse no modulo */
+/*       add = counter2[j]; */
+/*       loc = loc + add*counter_orig2[j]; */
+      if (cmor_axes[avar->axes_ids[j]].axis!='T') {
+/* 	printf("J: %i, counter2[j]: %i, counter_orig2[j]: %i , avar->axes_ids[j]: %i, id: %s, revert: %i, len: %i\n",j,counter2[j],counter_orig2[j],avar->axes_ids[j],cmor_axes[avar->axes_ids[j]].id,cmor_axes[avar->axes_ids[j]].revert,cmor_axes[avar->axes_ids[j]].length); */
+	add = counter2[j]*cmor_axes[avar->axes_ids[j]].revert + (cmor_axes[avar->axes_ids[j]].length-1)*(1-cmor_axes[avar->axes_ids[j]].revert)/2;
+	loc = loc + (int)fmod(add+cmor_axes[avar->axes_ids[j]].offset,cmor_axes[avar->axes_ids[j]].length)*counter_orig2[j];
+      }
+      else {
+/* 	printf("time one\n"); */
+/* 	printf("J: %i, counter2[j]: %i, counter_orig2[j]: %i , avar->axes_ids[j]: %i, id: %s, revert: %i, len: %i\n",j,counter2[j],counter_orig2[j],avar->axes_ids[j],cmor_axes[avar->axes_ids[j]].id,cmor_axes[avar->axes_ids[j]].revert,counts[0]); */
+	add = counter2[j]*cmor_axes[avar->axes_ids[j]].revert + (counts[0]-1)*(1-cmor_axes[avar->axes_ids[j]].revert)/2;
+	loc = loc + (int)fmod(add+cmor_axes[avar->axes_ids[j]].offset,counts[0])*counter_orig2[j];
+      }
+/*       printf("add,loc are: %i, %i\n",add,loc); */
+    }
+
+    /* Copy from user's data into our data */
+/*     printf("i,loc: %d, %d\n",i,loc); */
+
+    if (itype=='d') tmp = (double)((double *)data)[loc];
+    else if (itype=='f') tmp = (double)((float *)data)[loc];
+    else if (itype=='i') tmp = (double)((int *)data)[loc];
+    else if (itype=='l') tmp = (double)((long *)data)[loc];
+    if (avar->isbounds) {
+      /* ok here's the code for filipping the code if necessary */
+      if (cmor_axes[avar->axes_ids[0]].revert==-1) {
+	loc = nelements - i -1;
+      }
+      else {
+	loc=i;
+      }
+      tmp = (double)((double *)data)[loc];
+    }
+/*     printf("data read as: i: %lf\n",(double)((int *)data)[loc]); */
+/*     printf("data read as: l: %lf\n",(double)((long *)data)[loc]); */
+/*     printf("data read as: f: %lf\n",(double)((float *)data)[loc]); */
+/*     printf("data read as: d: %lf\n",(double)((double *)data)[loc]); */
+/*     printf("type is: %c, tmp is: %lf\n",itype,tmp); */
+/*     printf("missing is: %lf\n",avar->missing); */
+    tmp2 = (double)fabs(tmp-avar->missing);
+    if ((avar->nomissing==0) && (tmp2<=avar->tolerance*(double)fabs(tmp))) {
+      tmp = avar->omissing;
+    }
+    else {
+      if (dounits==1) {
+	tmp = cv_convert_double(ut_cmor_converter,tmp);
+	if (ut_get_status() != UT_SUCCESS ) {
+	  snprintf(msg,CMOR_MAX_STRING," in udunits, converting values");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	  cmor_pop_traceback();
+	  return 1;
+	}
+      }
+      tmp = tmp*avar->sign; /* do we need to change the sign ? */
+      amean += fabs(tmp);
+      nelts+=1;
+      if ((avar->valid_min!=(float)1.e20) && (tmp<avar->valid_min)) {
+	n_lower_min+=1;
+	if (n_lower_min==1) { /*first time */
+	  snprintf(msg_min,CMOR_MAX_STRING, "Invalid value(s) detected for variable '%s': %%i values were lower than minimum valid value (%lf). First encountered bad value (%lf) was at indices:" , avar->id, avar->valid_min,tmp);
+	  for (j=0;j<avar->ndims;j++) {
+	    snprintf(msg2, CMOR_MAX_STRING, " %s: %i" , cmor_axes[avar->axes_ids[j]].id,counter2[j]);
+	    strncat(msg_min,msg2,CMOR_MAX_STRING-strlen(msg));
+	  }
+	}
+      }
+      if ((avar->valid_max!=(float)1.e20) && (tmp>avar->valid_max)) {
+	n_greater_max+=1;
+	if (n_greater_max==1) {
+	  snprintf(msg_max,CMOR_MAX_STRING, "Invalid value(s) detected for variable '%s': %%i values were greater than maximum valid value (%lf). First encountered bad value (%lf) is at indices:" , avar->id, avar->valid_max,tmp);
+	  for (j=0;j<avar->ndims;j++) {
+	    snprintf(msg2, CMOR_MAX_STRING, " %s: %i" , cmor_axes[avar->axes_ids[j]].id,counter2[j]);
+	    strncat(msg_max,msg2,CMOR_MAX_STRING-strlen(msg));
+	  }
+	}
+      }
+    }
+
+    /*printf("mtype: %c\n",mtype);*/
+    if (mtype=='i') idata_tmp[i]=(int)tmp;
+    else if (mtype=='l') ldata_tmp[i]=(long)tmp;
+    else if (mtype=='f') fdata_tmp[i]=(float)tmp;
+    else if (mtype=='d') data_tmp[i]=(double)tmp;
+  }
+  if (n_lower_min!=0) {
+    snprintf(msg,CMOR_MAX_STRING,msg_min,n_lower_min);
+    cmor_handle_error(msg,CMOR_NORMAL);
+  }
+  if (n_greater_max!=0) {
+    snprintf(msg,CMOR_MAX_STRING,msg_max,n_greater_max);
+    cmor_handle_error(msg,CMOR_NORMAL);
+  }
+  if ((avar->ok_min_mean_abs!=(float)1.e20) && (amean/nelts<avar->ok_min_mean_abs)) {
+    snprintf(msg,CMOR_MAX_STRING, "Invalid Absolute Mean for variable '%s' (%lf) is lower than minimum allowed: %lf" , avar->id, amean/nelts, avar->ok_min_mean_abs);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if ((avar->ok_max_mean_abs!=(float)1.e20) && (amean/nelts>avar->ok_max_mean_abs)) {
+    snprintf(msg,CMOR_MAX_STRING, "Invalid Absolute Mean for variable '%s' (%lf) is greater than maximum allowed: %lf" , avar->id, amean/nelts, avar->ok_max_mean_abs);
+    cmor_handle_error(msg,CMOR_CRITICAL);
+  }
+  if (dounits==1) {
+    cv_free(ut_cmor_converter);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing converter");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    
+    ut_free(cmor_units);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+    ut_free(user_units);
+    if (ut_get_status() != UT_SUCCESS) {
+      snprintf(msg,CMOR_MAX_STRING,"Udunits: Error freeing units");
+      cmor_handle_error(msg,CMOR_CRITICAL);
+    }
+  }
+  /* Initialize the start index in each dimensions */
+  for (i=0;i<avar->ndims;i++) starts[i]=0;
+  starts[0]=avar->ntimes_written;
+
+  /* Write the times passed by user */
+  if (ntimes_passed!=0){
+    if (time_vals!=NULL) {
+      if (cmor_axes[avar->axes_ids[0]].values!=NULL) {
+	snprintf(msg,CMOR_MAX_STRING,"in cmor_write: variable '%s' you are passing time values but you already defined them via cmor_axis, this is not allowed",avar->id);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+
+      if (time_bounds!=NULL) {
+
+	counts2[0]=counts[0];
+	counts2[1]=2;
+	cmor_get_axis_attribute(avar->axes_ids[0],"units",'c',&msg);
+	cmor_get_cur_dataset_attribute("calendar",msg2);
+
+
+	
+/* 	else { */
+/* 	  /\* checking manually that time is within bounds *\/ */
+/* 	  if ((time_vals[0]<time_bounds[0]) || (time_vals[0]>time_bounds[1])) { */
+/* 	    snprintf(msg,CMOR_MAX_STRING, "Time point: %lf is not within the bounds you passed: [%lf, %lf]\n",time_vals[0],time_bounds[0],time_bounds[1]); */
+/* 	    cmor_handle_error(msg,CMOR_CRITICAL); */
+/* 	  } */
+/* 	} */
+	tmp_vals = malloc(ntimes_passed*2*sizeof(double));
+	if (tmp_vals == NULL) {
+	  snprintf(msg,CMOR_MAX_STRING,"cmor_write: cannot malloc %i tmp bounds time vals for variable '%s'",ntimes_passed*2,avar->id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+	ierr = cmor_convert_time_values(time_vals,'d',ntimes_passed,&tmp_vals[0],cmor_axes[avar->axes_ids[0]].iunits,msg,msg2,msg2);
+	ierr = cmor_check_monotonic(&tmp_vals[0],ntimes_passed,"time",0,avar->axes_ids[0]);
+
+	ierr = cmor_convert_time_values(time_bounds,'d',ntimes_passed*2,&tmp_vals[0],cmor_axes[avar->axes_ids[0]].iunits,msg,msg2,msg2);
+	ierr = cmor_check_monotonic(&tmp_vals[0],ntimes_passed*2,"time",1,avar->axes_ids[0]);
+	ierr = cmor_check_values_inside_bounds(&time_vals[0],&time_bounds[0], ntimes_passed, "time");
+	ierr = nc_put_vara_double(ncid,avar->time_bnds_nc_id,starts,counts2,tmp_vals);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing time bounds for variable '%s', already written in file: %i",ierr,avar->id,avar->ntimes_written);cmor_handle_error(msg,CMOR_CRITICAL);}
+
+	/* ok since we have bounds we need to set time in the middle */
+	/* but only do this in case of none climato */
+	if (cmor_tables[cmor_axes[avar->axes_ids[0]].ref_table_id].axes[cmor_axes[avar->axes_ids[0]].ref_axis_id].climatology==0) {
+	  for (i=0;i<ntimes_passed;i++) {
+	    tmp_vals[i]=(tmp_vals[2*i]+tmp_vals[2*i+1])/2.;
+	  }
+	}
+	else { /* we need to put into tmp_vals the right things */
+	  tmp_vals[ntimes_passed-2]=tmp_vals[0] ; /*store for later */
+	  ierr = cmor_convert_time_values(time_vals,'d',ntimes_passed,&tmp_vals[0],cmor_axes[avar->axes_ids[0]].iunits,msg,msg2,msg2);
+	}
+	
+
+	ierr = nc_put_vara_double(ncid,avar->time_nc_id,starts,counts,&tmp_vals[0]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing time values for variable '%s'",ierr,avar->id);cmor_handle_error(msg,CMOR_CRITICAL);}
+
+	if (cmor_tables[cmor_axes[avar->axes_ids[0]].ref_table_id].axes[cmor_axes[avar->axes_ids[0]].ref_axis_id].climatology==0) {
+	  /* all good in that case */
+	}
+	else {
+	  tmp_vals[0] = tmp_vals[ntimes_passed*2-2];
+	  tmp_vals[ntimes_passed-1]=tmp_vals[ntimes_passed*2-1];
+	}	/* ok now we need to store first and last stuff */
+	if (avar->ntimes_written == 0) {
+	  /* ok first time we're putting data  in */
+	  avar->first_time = tmp_vals[0];
+	}
+	else {
+	  if (tmp_vals[0]<avar->last_time) {
+	    snprintf(msg,CMOR_MAX_STRING, "Time point: %lf ( %lf in output units) is not monotonic last time was: %lf (in output units)\n",time_vals[0],tmp_vals[0],avar->last_time);
+	    cmor_handle_error(msg,CMOR_CRITICAL);
+	  }
+	}
+/* 	printf("setting last time to: %lf\n",tmp_vals[ntimes_passed-1]); */
+	avar->last_time = tmp_vals[ntimes_passed-1];
+
+	free(tmp_vals);
+      }
+      else {
+	/* checks wether you need bounds or not */
+	if (cmor_tables[cmor_axes[avar->axes_ids[0]].ref_table_id].axes[cmor_axes[avar->axes_ids[0]].ref_axis_id].must_have_bounds==1) {
+	  snprintf(msg,CMOR_MAX_STRING,"in cmor_write, time axis must have bounds, please pass them to cmor_write along with time values");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+
+	cmor_get_axis_attribute(avar->axes_ids[0],"units",'c',&msg);
+	cmor_get_cur_dataset_attribute("calendar",msg2);
+	tmp_vals = malloc(ntimes_passed*sizeof(double));
+	if (tmp_vals == NULL)  {
+	  snprintf(msg,CMOR_MAX_STRING,"cmor_write: cannot malloc %i  time vals for variable '%s'",ntimes_passed,avar->id);
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+	ierr = cmor_convert_time_values(time_vals,'d',ntimes_passed,&tmp_vals[0],cmor_axes[avar->axes_ids[0]].iunits,msg,msg2,msg2);
+	ierr = nc_put_vara_double(ncid,avar->time_nc_id,starts,counts,tmp_vals);
+/* 	printf("setting last time to (4): %lf\n",tmp_vals[ntimes_passed-1]); */
+	if (avar->ntimes_written == 0) {
+	  /* ok first time we're putting data  in */
+	  avar->first_time = tmp_vals[0];
+	}
+	avar->last_time = tmp_vals[ntimes_passed-1];
+/* 	printf("setting last time to: %f\n",avar->last_time); */
+	free(tmp_vals);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF error (%i) writing times for variable '%s', already written in file: %i",ierr,avar->id,avar->ntimes_written);cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+    }
+    else { /* ok we did not pass time values therefore it means they were defined via the axis */
+      if (cmor_axes[avar->axes_ids[0]].values==NULL) {
+	snprintf(msg,CMOR_MAX_STRING,"in cmor_write: variable '%s' you are passing %i times but no values and you did not define them via cmor_axis",avar->id,ntimes_passed);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      if (cmor_axes[avar->axes_ids[0]].bounds!=NULL) {
+	/* ok at that stage the recentering must already be done so we just need to write the bounds */
+	counts2[0]=counts[0];
+	counts2[1]=2;
+	ierr = nc_put_vara_double(ncid,avar->time_bnds_nc_id,starts,counts2,&cmor_axes[avar->axes_ids[0]].bounds[starts[0]*2]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NCError (%i) writting time bounds values for variable '%s'",ierr,avar->id);cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+      else {
+	/* checks wether you need bounds or not */
+	if (cmor_tables[cmor_axes[avar->axes_ids[0]].ref_table_id].axes[cmor_axes[avar->axes_ids[0]].ref_axis_id].must_have_bounds==1) {
+	  snprintf(msg,CMOR_MAX_STRING,"in cmor_write, time axis must have bounds, you defined it w/o");
+	  cmor_handle_error(msg,CMOR_CRITICAL);
+	}
+      }
+      ierr = nc_put_vara_double(ncid,avar->time_nc_id,starts,counts,&cmor_axes[avar->axes_ids[0]].values[starts[0]]);
+      if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NCError (%i) writting time values for variable '%s'",ierr,avar->id);cmor_handle_error(msg,CMOR_CRITICAL);}
+      /* ok now we need to stroe first and last stuff */
+      avar->first_time = cmor_axes[avar->axes_ids[0]].values[0];
+/*       printf("setting last time (2) to: %lf\n",cmor_axes[avar->axes_ids[0]].values[starts[0]+counts[0]-1]); */
+      avar->last_time = cmor_axes[avar->axes_ids[0]].values[starts[0]+counts[0]-1];
+    }
+  }
+  else { /* ok we did not pass time values therefore it means they were defined via the axis */
+    ierr = -1;
+    /* look for time dimension */
+    for (i = 0;i<avar->ndims;i++) {
+      if (cmor_axes[avar->axes_ids[0]].axis=='T') {
+	ierr = i;
+	break;
+      }
+    }
+    if (ierr!=-1) {
+      if (cmor_axes[avar->axes_ids[ierr]].values==NULL) {
+	snprintf(msg,CMOR_MAX_STRING,"in cmor_write: variable '%s' you are passing %i times but no values and you did not define them via cmor_axis",avar->id,ntimes_passed);
+	cmor_handle_error(msg,CMOR_CRITICAL);
+      }
+      if (cmor_axes[avar->axes_ids[ierr]].bounds!=NULL) {
+	/* ok at that stage the recentering must already be done so we just need to write the bounds */
+	counts2[0]=counts[0];
+	counts2[1]=2;
+	starts[0]=0;
+	starts[1]=0;
+	ierr = nc_put_vara_double(ncid,avar->time_bnds_nc_id,starts,counts2,&cmor_axes[avar->axes_ids[0]].bounds[starts[0]*2]);
+	if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NCError (%i) writting time bounds values for variable '%s'",ierr,avar->id);cmor_handle_error(msg,CMOR_CRITICAL);}
+      }
+      ierr = nc_put_vara_double(ncid,avar->time_nc_id,starts,counts,&cmor_axes[avar->axes_ids[0]].values[starts[0]]);
+      if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NCError (%i) writting time values for variable '%s'",ierr,avar->id);cmor_handle_error(msg,CMOR_CRITICAL);}
+      /* ok now we need to stroe first and last stuff */
+      avar->first_time = cmor_axes[avar->axes_ids[0]].values[0];
+/*       printf("setting last time (3) to: %lf\n",cmor_axes[avar->axes_ids[0]].values[starts[0]+counts[0]-1]); */
+      avar->last_time = cmor_axes[avar->axes_ids[0]].values[starts[0]+counts[0]-1];
+    }
+  }
+  
+  if (avar->isbounds) {counts[avar->ndims]=2;starts[avar->ndims]=0;}
+  if (mtype=='d') ierr = nc_put_vara_double(ncid,avar->nc_var_id,starts,counts,data_tmp);
+  else if (mtype=='f') ierr = nc_put_vara_float(ncid,avar->nc_var_id,starts,counts,fdata_tmp);
+  else if (mtype=='l') ierr = nc_put_vara_long(ncid,avar->nc_var_id,starts,counts,ldata_tmp);
+  else if (mtype=='i') ierr = nc_put_vara_int(ncid,avar->nc_var_id,starts,counts,idata_tmp);
+
+  if (ierr != NC_NOERR) {snprintf(msg,CMOR_MAX_STRING,"NetCDF Error (%i), writing variable '%s' to file",ierr,avar->id);cmor_handle_error(msg,CMOR_CRITICAL);}
+  avar->ntimes_written+=ntimes_passed;
+  if (mtype=='d') free(data_tmp);
+  else if (mtype=='f') free(fdata_tmp);
+  else if (mtype=='l') free(ldata_tmp);
+  else if (mtype=='i') free(idata_tmp);
+  cmor_pop_traceback();
+  return 0;
+}
diff --git a/Tables/CMIP5_3hr b/Tables/CMIP5_3hr
new file mode 100644
index 0000000..bf324cf
--- /dev/null
+++ b/Tables/CMIP5_3hr
@@ -0,0 +1,729 @@
+table_id: Table 3hr
+modeling_realm: atmos
+
+frequency: 3hr
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.125000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time1
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time:mean
+cell_measures:      area: areacella
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases.  This is the 3-hour mean precipitation flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature, sampled synoptically.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upward Latent Heat Flux
+comment:           This is the 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upward Sensible Heat Flux
+comment:           This is the 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Longwave Radiation
+comment:           This is the 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Longwave Radiation
+comment:           This is the 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Shortwave Radiation
+comment:           This is the 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Shortwave Radiation
+comment:           This is the 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Eastward Near-Surface Wind Speed
+comment:           sampled synoptically.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Northward Near-Surface Wind Speed
+comment:           sampled synoptically.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually 2 m) specific humidity, sampled synoptically.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrsos
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     moisture_content_of_soil_layer
+units:             kg m-2
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Moisture in Upper 0.1 m of Soil Column
+comment:           Compute the mass of water in all phases in the upper 0.1 meters of soil.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          mrsos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tslsi
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:          Surface Temperature Where Land or Sea Ice
+comment:           ""skin"" temperature of all surfaces except open ocean, sampled synoptically.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          tslsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tso
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_surface_temperature
+units:             K
+cell_methods:      time: point area: mean where sea
+cell_measures:      area: areacella
+long_name:         Sea Surface Temperature
+comment:           temperature of surface of open ocean, sampled synoptically.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          tso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time:mean
+cell_measures:      area: areacella
+long_name:         Convective Precipitation
+comment:           at surface.  This is a 3-hour mean convective precipitation flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time:mean
+cell_measures:      area: areacella
+long_name:         Snowfall Flux
+comment:           at surface.  Includes all forms of precipitating solid phase of water.  This is the 3-hour mean snowfall flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrro
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     runoff_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Total Runoff
+comment:           compute the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell divided by the land area in the grid cell, averaged over the 3-hour interval.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrro
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+comment:           This is a 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+comment:           This is a 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rluscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+comment:           This is a 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rluscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Surface Pressure
+comment:           sampled synoptically to diagnose atmospheric tides, this is better than mean sea level pressure.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.  This is a 3-hour mean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdsdiff
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downward Diffuse Shortwave Radiation
+comment:           This is a 3-hour mean flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdsdiff
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_6hrLev b/Tables/CMIP5_6hrLev
new file mode 100644
index 0000000..dd3f2b6
--- /dev/null
+++ b/Tables/CMIP5_6hrLev
@@ -0,0 +1,608 @@
+table_id: Table 6hrLev
+modeling_realm: atmos
+
+frequency: 6hr
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.250000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time1
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_measures:      area: areacella
+long_name:         Air Temperature
+comment:           on all model levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+comment:           on all model levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_measures:      area: areacella
+long_name:         Northward Wind
+comment:           on all model levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+comment:           on all model levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_measures:      area: areacella
+long_name:         Surface Air Pressure
+comment:           surface pressure, not mean sea level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_6hrPlev b/Tables/CMIP5_6hrPlev
new file mode 100644
index 0000000..04fb686
--- /dev/null
+++ b/Tables/CMIP5_6hrPlev
@@ -0,0 +1,252 @@
+table_id: Table 6hrPlev
+modeling_realm: atmos
+
+frequency: 6hr
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.250000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plev3
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        85000. 50000. 25000.         ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: time1
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+comment:           on the following pressure levels: 850, 500, 250 hPa
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev3 time1
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_measures:      area: areacella
+long_name:         Northward Wind
+comment:           on the following pressure levels: 850, 500, 250 hPa
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev3 time1
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_measures:      area: areacella
+long_name:         Air Temperature
+comment:           on the following pressure levels: 850, 500, 250 hPa
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev3 time1
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_measures:      area: areacella
+long_name:         Sea Level Pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Amon b/Tables/CMIP5_Amon
new file mode 100644
index 0000000..429a3b8
--- /dev/null
+++ b/Tables/CMIP5_Amon
@@ -0,0 +1,2128 @@
+table_id: Table Amon
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plevs
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 30000. 25000. 20000. 15000. 10000. 7000. 5000. 3000. 2000. 1000.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time2
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+climatology:      yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Near-Surface Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ts
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Surface Temperature
+comment:           ""skin"" temperature (i.e., SST for open ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ts
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: minimum within days time: mean over days
+long_name:         Daily Minimum Near-Surface Air Temperature
+comment:           monthly mean of the daily-minimum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: maximum within days time: mean over days
+long_name:         Daily Maximum Near-Surface Air Temperature
+comment:           monthly mean of the daily-maximum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: mean
+long_name:         Sea Level Pressure
+comment:           not, in general, the same as surface pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Air Pressure
+comment:           not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) northward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hurs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          hurs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meters) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Snowfall Flux
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Evaporation
+comment:           at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evspsbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tauu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_eastward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Eastward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauu
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauv
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_northward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Northward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauv
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Incident Shortwave Radiation
+comment:           incident shortwave at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Shortwave Radiation
+comment:           at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere (to be compared with satellite measurements)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    prw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_water_vapor_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Water Vapor Path
+comment:           vertically integrated through the atmospheric column
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rtmt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_downward_radiative_flux_at_top_of_atmosphere_model
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Net Downward Flux at Top of Model
+comment:           i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rtmt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ci 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Convection Occurs
+comment:           Fraction of time that convection occurs in the grid cell .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ci 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sci
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Shallow Convection Occurs
+comment:           Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2antt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg  m-2 s-1
+cell_methods:      time: mean
+long_name:         Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2antt
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2fos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2fos
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2nat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources
+comment:           Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e., ""net ecosystem biospheric productivity"", for land, and ""ai [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2nat
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud Area Fraction
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cells. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Ice
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud ice in the grid cell divided by the mass of air (including the water in all phases) in the grid cell. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_convective_mass_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  The flux is computed as the mass divided by the area of the grid cell.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          mc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of O3
+comment:           If this does not change over time (except possibly to vary identically over each annual cycle), report instead the variable described in the next table entry. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3Clim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of O3
+comment:           If O3 does not vary from one year to the next, report 12 months, starting with January.   (Note: include all 12 months even if the values don't vary seasonally.)  When calling CMOR, identify this variable as tro3Clim, not tro3. If the O3 varies from one year to the next,  then report instead the field described in the previous table entry.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2Clim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2Clim, not co2.   If  CO2 is spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2mass
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean
+long_name:         Total Atmospheric Mass of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2massClim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean within years time: mean over years
+long_name:         Total Atmospheric Mass of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2massClim, not co2mass.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4global, not ch4.   If  CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4global
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially nonuniform, omit this field, but report Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4globalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If CH4 is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2o
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as n2oglobal, not n2o.   If  N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobal
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially nonuniform, omit this field, but report Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If N2O is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Pressure on Model Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time2
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Pressure on Model Half-Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time2
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Limon b/Tables/CMIP5_Limon
new file mode 100644
index 0000000..a15f6a2
--- /dev/null
+++ b/Tables/CMIP5_Limon
@@ -0,0 +1,473 @@
+table_id: Table LImon
+modeling_realm: land
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: sdepth
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    depth
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        depth
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         depth
+valid_min:        0         
+valid_max:        200 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+variable_entry:    snc
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Snow Area Fraction
+comment:           Fraction of each grid cell that is occupied by snow that rests on land portion of cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snw
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_amount
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Surface Snow Amount
+comment:           Compute as the mass of surface snow on the land portion of the grid cell divided by the land area in the grid cell; report as 0.0 where the land fraction is 0; exclude snow on vegetation canopy or on sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snd
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_thickness
+units:             m
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Snow Depth
+comment:           where land over land.  Compute the mean thickness of snow in the land portion of the grid cell (averaging over the entire land portion, including the snow-free fraction.  Report as 0.0 where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snd
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    lwsnl
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     liquid_water_content_of_snow_layer
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Liquid Water Content of Snow Layer
+comment:           where land over land: compute the total mass of liquid water contained interstitially within the snow layer of the land portion of a grid cell divided by the area of the land portion of the cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          lwsnl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrfso
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_frozen_water_content
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Soil Frozen Water Content
+comment:           summed over all soil layers, where land over land: compute by dividing the total mass of frozen water contained in the soil layer of the grid cell by the land area in the grid cell; report as 0.0 where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrfso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mfrso
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_moisture_content
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Soil Moisture Content
+comment:           summed over all soil layers, where land over land: compute by dividing the total mass of water (both liquid and ice) contained in the soil layer of the grid cell by the land area in the grid cell; report as 0.0 where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mfrso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sootsn
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snow_soot_content
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Snow Soot Content
+comment:           Consider the entire land portion of the grid cell, with snow soot content set to 0.0 in regions free of snow.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sootsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    agesno
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             day
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Snow Age
+comment:           When computing the time-mean here, the time samples, weighted by the mass of snow on the land portion of the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing in regions free of snow on land.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          agesno
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tsn
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snow_temperature
+units:             K
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Snow Internal Temperature
+comment:           This temperature is averaged over all the snow in the grid cell that rests on land or land ice.  When computing the time-mean here, the time samples, the weighted by the mass of snow on the land portion of the grid cell, are accumulated and then divided by the sum of the weights.   Report as ""missing in regions free of snow on land.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snm
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_melt_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Surface Snow Melt
+comment:           Compute as the total surface melt water on the land portion of the grid cell divided by the land area in the grid cell; report as 0.0 for snow-free land regions; report as 0.0 where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snm
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_and_ice_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass resulting from their conversion to water vapor.  Compute as the total sublimation on the land portion of the grid cell divided by the land area in the grid cell; report as 0.0 for snow-free land regions; report as 0.0 where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfdsn
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Downward Heat Flux into Snow Where Land over Land
+comment:           Compute the net downward heat flux from the atmosphere into the snow that lies on land divided by the land area in the grid cell; report as 0.0 for snow-free land regions or where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfdsn
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tpf
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Permafrost Layer Thickness
+comment:           where land over land. Compute the mean thickness of the permafrost layer in the land portion of the grid cell.  Report as 0.0 in permafrost-free regions.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tpf
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pflw
+!============
+modeling_realm:    landIce land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Liquid Water Content of Permafrost Layer
+comment:           ""where land over land"", i.e., this is the total mass of liquid water contained within the permafrost layer within the land portion of a grid cell divided by the area of the land portion of the cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pflw
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Lmon b/Tables/CMIP5_Lmon
new file mode 100644
index 0000000..ece8d94
--- /dev/null
+++ b/Tables/CMIP5_Lmon
@@ -0,0 +1,1484 @@
+table_id: Table Lmon
+modeling_realm: land
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: sdepth
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    depth
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        depth
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         depth
+valid_min:        0         
+valid_max:        200 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: sdepth1 
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    depth
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        depth
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         depth
+valid_min:        0         
+valid_max:        0.2 
+stored_direction: increasing
+type:             double
+value:            0.05            ! of scalar (singleton) dimension 
+bounds_values:    0.0 0.1    ! of scalar (singleton) dimension bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: vegtype
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+units:            1
+long_name:        plant functional type
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         type
+type:             character
+must_have_bounds: no
+coords_attrib:    type_description
+!----------------------------------
+!
+
+!============
+variable_entry:    mrsos
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     moisture_content_of_soil_layer
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Moisture in Upper 0.1 m of Soil Column
+comment:           Compute the mass of water in all phases in the upper 0.1 meters of soil.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time sdepth1
+out_name:          mrsos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrso
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_moisture_content
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Total Soil Moisture Content
+comment:           Compute the mass per unit area  (summed over all soil layers) of water in all phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrlso
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_frozen_water_content
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Soil Frozen Water Content 
+comment:           Compute the mass (summed over all all layers) of frozen water.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrlso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrros
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_runoff_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Surface Runoff
+comment:           Compute the total surface runoff leaving the land portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrros
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrro
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     runoff_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Total Runoff
+comment:           "compute the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrro
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prveg
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux_onto_canopy
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Precipitation onto Canopy
+comment:           Report the precipitation flux that is intercepted by the vegetation canopy (if present in model) before reaching the ground.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prveg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsblveg
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux_from_canopy
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Evaporation from Canopy
+comment:           Report the canopy evaporation+sublimation (if present in model).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evspsblveg
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsblsoi
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux_from_soil
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Water Evaporation from Soil
+comment:           includes sublimation.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evspsblsoi
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    tran
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     transpiration_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Transpiration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tran
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    mrlsl
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     moisture_content_of_soil_layer
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:          Water Content of Soil Layer
+comment:           in each soil layer, the mass of water in all phases, including ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude sdepth time
+out_name:          mrlsl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tsl
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Temperature of Soil
+comment:           "Temperature of each soil layer.  Report as ""missing"" for grid cells occupied entirely by ""sea""."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude sdepth time
+out_name:          tsl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    treeFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tree Cover Fraction
+comment:           fraction of entire grid cell  that is covered by trees.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          treeFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    grassFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Natural Grass Fraction
+comment:           fraction of entire grid cell that is covered by natural grass.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          grassFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    shrubFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Shrub Fraction
+comment:           fraction of entire grid cell  that is covered by shrub.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          shrubFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cropFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Crop Fraction
+comment:           fraction of entire grid cell  that is covered by crop. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cropFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pastureFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Anthropogenic Pasture Fraction
+comment:           fraction of entire grid cell  that is covered by anthropogenic pasture. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pastureFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    baresoilFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Bare Soil Fraction
+comment:           fraction of entire grid cell  that is covered by bare soil.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          baresoilFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    residualFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Fraction of Grid Cell that is Land but Neither Vegetation-Covered nor Bare Soil
+comment:           fraction of entire grid cell  that is land and is covered by ""non-vegetation"" and ""non-bare-soil"" (e.g., urban, ice, lakes, etc.) 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          residualFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    burntArea
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Burnt Area Fraction
+comment:           fraction of entire grid cell  that is covered by burnt vegetation.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          burntArea
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cVeg
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     vegetation_carbon_content
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Vegetation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cVeg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cLitter
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     litter_carbon_content
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Litter Pool
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cLitter
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cSoil
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_carbon_content
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Soil Pool
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cSoil
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cProduct
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Products of Land Use Change
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cProduct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    lai
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     leaf_area_index
+units:             1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Leaf Area Index
+comment:           projected leaf area per unit of ground area (i.e., only the land portion of the grid cell), expressed as a proper fraction (not a percentage)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          lai
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    gpp
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     gross_primary_productivity_of_carbon
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux out of Atmosphere due to Gross Primary Production on Land
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          gpp
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ra
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     plant_respiration_carbon_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to Autotrophic (Plant) Respiration on Land
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ra
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    npp
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_primary_productivity_of_carbon
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux out of Atmosphere due to Net Primary Production on Land
+comment:           needed for models that do not compute GPP (if any)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          npp
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rh
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     heterotrophic_respiration_carbon_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to Heterotrophic Respiration on Land
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rh
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fFire
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to CO2 Emission from Fire
+comment:           CO2 emissions (expressed as a carbon mass flux) from natural fires + human ignition fires as calculated by the fire module of the DGVM, but excluding any CO2 flux from fire included in fLuc, defined below (CO2 Flux to Atmosphere from Land Use Change).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fFire
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fGrazing
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to Grazing on Land
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fGrazing
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fHarvest
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to Crop Harvesting
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fHarvest
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fLuc
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Net Carbon Mass Flux into Atmosphere due to Land Use Change
+comment:           human changes to land (excluding forest regrowth) accounting possibly for different time-scales related to fate of the wood, for example.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fLuc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    nbp
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux out of Atmosphere due to Net Biospheric Production on Land
+comment:           This is the net mass flux of carbon between land and atmosphere calculated as photosynthesis MINUS the sum of  plant and soil respiration, carbonfluxes  from fire, harvest, grazing  and land use change. Positive flux  is into the land.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          nbp
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    fVegLitter
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     litter_carbon_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Total Carbon Mass Flux from Vegetation to Litter
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fVegLitter
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fLitterSoil
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Total Carbon Mass Flux from Litter to Soil
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fLitterSoil
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fVegSoil
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Total Carbon Mass Flux from Vegetation Directly to Soil
+comment:           In some models part of carbon (e.g., root exudate) can go directly into the soil pool without entering litter.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fVegSoil
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cLeaf
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Leaves
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cLeaf
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cWood
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Wood
+comment:           including sapwood and hardwood.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cWood
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cRoot
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Roots
+comment:           including fine and coarse roots.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cRoot
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cMisc
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Other Living Compartments on Land
+comment:           e.g., labile, fruits, reserves, _. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cMisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cCwd
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Coarse Woody Debris
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cCwd
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cLitterAbove
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Above-Ground Litter
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cLitterAbove
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cLitterBelow
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Below-Ground Litter
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cLitterBelow
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cSoilFast
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Fast Soil Pool
+comment:           fast is meant as lifetime of less than 10 years for  reference climate conditions (20�C, no water limitations).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cSoilFast
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cSoilMedium
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Medium Soil Pool
+comment:           medium is meant as lifetime of more than than 10 years and less than 100 years for  reference climate conditions (20�C, no water limitations)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cSoilMedium
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cSoilSlow
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass in Slow Soil Pool
+comment:           fast is meant as lifetime of more than 100 years for  reference climate conditions (20�C, no water limitations)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cSoilSlow
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    landCoverFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Plant Functional Type Grid Fraction
+comment:           using each individual ESM PFT definition.   This includes natural PFTs, anthropogenic PFTs, bare soil, lakes, urban areas, etc.   Sum of all should equal the fraction of the grid-cell that is land.  Note that the ""types"" will be model dependent and for each type there should be a full description of the PFT (plant functional type).   To facilitate model comparison, it is also requested that the aggregated land cover types called for in lines 25 to 32 be archived (but [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude vegtype time
+out_name:          landCoverFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    treeFracPrimDec
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Primary Deciduous Tree Fraction
+comment:           "Agregation of model PFTs as defined in 1st priority to aid model intercomparison.  This is the fraction of the entire grid cell  that is covered by ""total primary deciduous trees.""    "
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          treeFracPrimDec
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    treeFracPrimEver
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Primary Evergreen Tree Cover Fraction
+comment:           fraction of entire grid cell  that is covered by primary evergreen trees. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          treeFracPrimEver
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    treeFracSecDec
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Secondary Deciduous Tree Cover Fraction
+comment:           fraction of entire grid cell  that is covered by secondary deciduous trees.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          treeFracSecDec
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    treeFracSecEver
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Secondary Evergreen Tree Cover Fraction
+comment:           fraction of entire grid cell  that is covered by secondary evergreen trees.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          treeFracSecEver
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    c3PftFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total C3 PFT Cover Fraction
+comment:           fraction of entire grid cell  that is covered by C3 PFTs (including grass, crops, and trees).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          c3PftFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    c4PftFrac
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total C4 PFT Cover Fraction
+comment:           fraction of entire grid cell  that is covered by C4 PFTs (including grass and crops).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          c4PftFrac
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rGrowth
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to Growth Autotrophic Respiration on Land
+comment:           "This flux and the one in the following row provide a breakdown of the higher priority ""Autotrophic (Plant) Respiration"" in an earlier row of this table; thus the sum should be identical to that."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rGrowth
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rMaint
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux into Atmosphere due to Maintenance Autotrophic Respiration on Land
+comment:           "This flux and the one in the previous row provide a breakdown of the higher priority ""Autotrophic (Plant) Respiration"" in an earlier row of this table; thus the sum should be identical to that."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rMaint
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    nppLeaf
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux due to NPP Allocation to Leaf
+comment:           This is the rate of carbon uptake by leaves due to NPP
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          nppLeaf
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    nppWood
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux due to NPP Allocation to Wood
+comment:           This is the rate of carbon uptake by wood due to NPP
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          nppWood
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    nppRoot
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Carbon Mass Flux due to NPP Allocation to Roots
+comment:           This is the rate of carbon uptake by roots due to NPP
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          nppRoot
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    nep
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Net Carbon Mass Flux out of Atmophere due to Net Ecosystem Productivity on Land.
+comment:           Natural flux of CO2 (expressed as a mass flux of carbon) from the atmosphere to the land calculated as the difference between uptake associated will photosynthesis and the release of CO2 from the sum of plant and soil respiration and fire.  Positive flux is into the land.  emissions from natural fires + human ignition fires as calculated by the fire module of the DGVM, but excluding any CO2 flux from fire included in fLuc, defined below (CO2 Flux to Atmosphere from Lan [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          nep
+type:              real
+positive:          down
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Oclim b/Tables/CMIP5_Oclim
new file mode 100644
index 0000000..e5052b4
--- /dev/null
+++ b/Tables/CMIP5_Oclim
@@ -0,0 +1,991 @@
+table_id: Table Oclim
+modeling_realm: ocean
+
+frequency: monClim
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time2
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+climatology:      yes
+!----------------------------------
+!
+
+!============
+axis_entry: depth_coord
+!============
+!
+!  This vertical coordinate is used in z-coordinate models 
+!   The units are meters (m), and it has a value of 0. at the surface
+!   and becomes more and more negative with depth.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:	      up
+long_name:        ocean depth coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -12000.
+valid_max:        0.
+!----------------------------------	
+!
+!============
+axis_entry: ocean_double_sigma
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_double_sigma
+axis:             Z
+positive:	  up
+long_name:        ocean double sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= k_c:\n z(k,j,i)= sigma(k)*f(j,i) \n for k > k_c:\n z(k,j,i)= f(j,i) + (sigma(k)-1)*(depth(j,i)-f(j,i)) \n f(j,i)= 0.5*(z1+ z2) + 0.5*(z1-z2)* tanh(2*a/(z1-z2)*(depth(j,i)-href))
+z_factors:        sigma: sigma depth: depth z1: z1 z2: z2 a: a_coeff href: href k_c: k_c
+z_bounds_factors: sigma: sigma_bnds depth: depth z1: z1 z2: z2 a: a href: href k_c: k_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma_z
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_z
+axis:             Z
+long_name:        ocean sigma over z coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= nsigma: z(n,k,j,i) = eta(n,j,i) + sigma(k)*(min(depth_c,depth(j,i))+eta(n,j,i)) ; for k > nsigma: z(n,k,j,i) = zlev(k)
+z_factors:        sigma: sigma eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev
+z_bounds_factors: sigma: sigma_bnds eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: ocean_s
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of s(k), which appears in the formula below, should be stored as ocean_s.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_s.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_s_coordinate
+axis:             Z
+positive:	  up
+long_name:        ocean s-coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i)*(1+s(k)) + depth_c*s(k) + (depth(j,i)-depth_c)*C(k) \n where \n C(k)=(1-b)*sinh(a*s(k))/sinh(a) +\n           b*(tanh(a*(s(k)+0.5))/(2*tanh(0.5*a)) - 0.5)
+z_factors:        s: lev eta: eta depth: depth a: a_coeff b: b_coeff depth_c: depth_c
+z_bounds_factors: s: lev_bnds eta: eta depth: depth a: a b: b depth_c: depth_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of sigma(k), which appears in the formula below, should be stored as ocean_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_coordinate
+axis:             Z
+positive:	      up
+long_name:        ocean sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i) + sigma(k)*(depth(j,i)+eta(n,j,i))
+z_factors:        sigma: lev eta: eta depth: depth
+z_bounds_factors: sigma: lev_bnds eta: eta depth: depth
+!----------------------------------	
+!
+!
+! ***************************************************************
+!
+! Vertical coordinate formula_terms:
+!
+! ***************************************************************
+!
+!============
+variable_entry: eta
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:            m
+cell_methods:     time: mean
+long_name:        Sea Surface Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+type:      real
+!----------------------------------
+!
+!
+!============
+variable_entry: depth
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:        m
+long_name:    Sea Floor Depth
+comment:      Ocean bathymetry.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude
+out_name:  depth
+type:      real
+valid_min:        0
+valid_max:        10000
+ok_min_mean_abs:  2000
+ok_max_mean_abs:  5000
+!----------------------------------
+!
+!
+!============
+variable_entry: sigma
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: depth_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: depth_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: a
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient a
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: b
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient b
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: nsigma
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: nsigma
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+!============
+variable_entry: z1
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z1
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: z2
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z2
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: href
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: href
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: k_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: k_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+
+!============
+variable_entry:    difvho
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_heat_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Heat Diffusivity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvho
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvso
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_salt_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Salt Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvtrbo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_tracer_diffusivity_due_to_background
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Tracer Diffusivity due to Background 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvtrbo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvtrto
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_tracer_diffusivity_due_to_tides
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Tracer Diffusivity due to Tides 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvtrto
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnpeo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_ocean_potential_energy_content
+units:             W m-2
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Tendency of Ocean Potential Energy Content 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          tnpeo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnpeot
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_ocean_potential_energy_content_due_to_tides
+units:             W m-2
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Tendency of Ocean Potential Energy Content due to Tides 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          tnpeot
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnpeotb
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_ocean_potential_energy_content_due_to_background
+units:             W m-2
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Tendency of Ocean Potential Energy Content due to Background
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          tnpeotb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvmo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_momentum_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Momentum Diffusivity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvmo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvmbo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_momentum_diffusivity_due_to_background
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Momentum Diffusivity due to Background
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvmbo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvmto
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_momentum_diffusivity_due_to_tides
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Momentum Diffusivity due to Tides
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvmto
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difvmfdo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_vertical_momentum_diffusivity_due_to_form_drag
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Vertical Momentum Diffusivity due to Form Drag
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difvmfdo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dispkevfo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_kinetic_energy_dissipation_per_unit_area_due_to_vertical_friction
+units:             W m-2
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Kinetic Energy Dissipation Per Unit Area due to Vertical Friction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          dispkevfo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    diftrblo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_tracer_bolus_laplacian_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+long_name:         Ocean Tracer Bolus Laplacian Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          diftrblo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    diftrbbo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_tracer_bolus_biharmonic_diffusivity
+units:             m4 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Tracer Bolus Biharmonic Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          diftrbbo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    diftrelo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_tracer_epineutral_laplacian_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Tracer Epineutral Laplacian Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          diftrelo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    diftrebo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_tracer_epineutral_biharmonic_diffusivity
+units:             m4 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Tracer Epineutral Biharmonic Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          diftrebo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    diftrxylo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_tracer_xy_laplacian_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Tracer XY Laplacian Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          diftrxylo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    diftrxybo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_tracer_xy_biharmonic_diffusivity
+units:             m4 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Tracer XY Biharmonic Diffusivity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          diftrxybo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnkebto
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_ocean_eddy_kinetic_energy_content_due_to_bolus_transport
+units:             W m-2
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Tendency of Ocean Eddy Kinetic Energy Content due to Bolus Transport 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          tnkebto
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difmxylo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_momentum_xy_laplacian_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Momentum XY Laplacian Diffusivity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difmxylo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    difmxybo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_momentum_xy_biharmonic_diffusivity
+units:             m4 s-1
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Momentum XY Biharmonic Diffusivity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          difmxybo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dispkexyfo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_kinetic_energy_dissipation_per_unit_area_due_to_xy_friction
+units:             W m-2
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Kinetic Energy Dissipation Per Unit Area due to XY Friction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time2
+out_name:          dispkexyfo
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Oimon b/Tables/CMIP5_Oimon
new file mode 100644
index 0000000..08edd07
--- /dev/null
+++ b/Tables/CMIP5_Oimon
@@ -0,0 +1,962 @@
+table_id: Table OImon
+modeling_realm: ocean
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+variable_entry:    sic
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_ice_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Ice Area Fraction
+comment:           fraction of grid cell covered by sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sit
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_ice_thickness
+units:             m
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Sea Ice Thickness
+comment:           Compute the mean thickness of sea ice in the ocean portion of the grid cell (averaging over the entire ocean portion, including the ice-free fraction).  Report as 0.0 in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sit
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evap
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Water Evaporation Flux from Sea Ice
+comment:           Compute the average rate that water mass evaporates (or sublimates) from the sea ice surface (i.e., kg/s) divided by the area of the ocean (i.e., open ocean + sea ice) portion of the grid cell. This quantity multiplied both by the oean area of the grid cell and by the length of the month should yield the total mass of water evaporated (or sublimated) from the sea ice.  Report as 0.0 in regions free of sea ice.  [This was computed differently in CMIP3
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evap
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:     snd
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_thickness
+units:             m
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Snow Depth
+comment:           Compute the mean thickness of snow in the ocean portion of the grid cell (averaging over the entire ocean portion, including the snow-free ocean fraction).  Report as 0.0 in regions free of snow-covered sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           snd
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     snc
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Surface Snow Area Fraction
+comment:           Fraction of entire grid cell covered by snow that lies on sea ice; exclude snow that lies on land or land ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           snc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     ialb
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean area: mean where sea_ice
+cell_measures:      area: areacello
+long_name:         Bare Sea Ice Albedo
+comment:           "Report as ""missing"" if there is no sunlight or if a region is free of sea ice. "
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           ialb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ssi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             psu
+cell_methods:      time: mean (weighted by mass of sea ice)
+cell_measures:      area: areacello
+long_name:         Sea Ice Salinity
+comment:           When computing the time-mean here, the time-samples, weighted by the mass of sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ssi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     tsice
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             K
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Surface Temperature of Sea Ice
+comment:           When computing the time-mean here, the time-samples, weighted by the area of sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of sea ice.  Note this will be the surface snow temperature in regions where snow covers the sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           tsice
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     tsnint
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             K
+cell_methods:      time: mean (weighted by area of snow-covered sea ice)
+cell_measures:      area: areacello
+long_name:         Temperature at Interface Between Sea Ice and Snow
+comment:           When computing the time-mean here, the time-samples, weighted by the area of snow-covered sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of snow-covered sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           tsnint
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     pr
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Surface Rainfall Rate into the Sea Ice Portion of the Grid Cell
+comment:           where sea ice over sea: compute the the water mass per unit time falling as rain onto the sea ice portion of a grid cell divided by the area of the ocean portion of the grid cell (including both ice-free and sea-ice covered fractions).  Report as 0. in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     prsn
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Surface Snowfall Rate into the Sea Ice Portion of the Grid Cell
+comment:           where sea ice over sea: compute the the water mass per unit time falling as snow onto the sea ice portion of a grid cell divided by the area of the ocean portion of the grid cell (including both ice-free and sea-ice covered fractions).  Report as 0. in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     ageice
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             years
+cell_methods:      time: mean (weighted b mass of sea ice)
+cell_measures:      area: areacello
+long_name:         Age of Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the mass of sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           ageice
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     grFrazil
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Frazil Sea Ice Growth (Leads) Rate
+comment:           Compute the rate of change of sea ice mass due to frazil sea ice formation divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           grFrazil
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     grCongel
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Congelation Sea Ice Growth Rate
+comment:           Compute the rate of change of sea ice mass due to congelation sea ice divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           grCongel
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     grLateral
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Lateral Sea Ice Growth Rate
+comment:           Compute the rate of change of sea ice mass due to lateral growth alone of the sea ice divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           grLateral
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     snoToIce
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Snow-Ice Formation Rate
+comment:           Compute the rate of change of sea ice mass due to transformation of snow to sea ice, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of snow-covered sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           snoToIce
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     snomelt
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Snow Melt Rate
+comment:           Compute the rate of change of snow mass  due to melting, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.  Include falling snow that melts on impact with the surface. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           snomelt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     tmelt
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Melt at Upper Surface of Sea Ice
+comment:           Compute the rate of change of sea ice mass due to melting at its upper surface, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           tmelt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     bmelt
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Melt at Sea Ice Base
+comment:           Compute the rate of change of sea ice mass due to melting at its lower surface, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           bmelt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     hcice
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:                J
+cell_methods:      time: mean (weighted by mass of sea ice)
+cell_measures:      area: areacello
+long_name:         Sea Ice Total Heat Content
+comment:           Ice at 0 Celsius is assumed taken to have a heat content of 0 J.  When averaging over time, this quantity is weighted by the mass of sea ice.   Report as ""missing in regions free of snow on land.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hcice
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     rsdssi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Downward Shortwave over Sea Ice
+comment:           Compute the downward shortwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           rsdssi
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:     rsussi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Upward Shortwave over Sea Ice
+comment:           Compute the upward shortwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           rsussi
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:     rldssi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Downward Long Wave over Sea Ice
+comment:           Compute the downward longwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           rldssi
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:     rlussi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Upward Long Wave over Sea Ice
+comment:           Compute the upward longwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           rlussi
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:     hfssi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Surface Upward Sensible Heat Flux over Sea Ice
+comment:           Compute the upward sensible heat flux in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfssi
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:     hflssi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Surface Upward Latent Heat Flux over Sea Ice
+comment:           Compute the upward latent heat flux in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hflssi
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:     sblsi
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_and_ice_sublimation_flux
+units:             kg m-2
+cell_methods:      time: mean area: mean where sea_ice over sea
+cell_measures:      area: areacello
+long_name:         Sublimation over Sea Ice
+comment:           Compute the upward flux of water vapor to the atmosphere due to sublimation of snow and sea  ice in regions of sea ice divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           sblsi
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    transix
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Eastward Sea Ice Transport
+comment:           The sea ice transport is 0.0 in ice-free regions of the ocean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          transix
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    transiy
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Northward Sea Ice Transport
+comment:           The sea ice transport is 0.0 in ice-free regions of the ocean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          transiy
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    transifs
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Ice Mass Transport Through Fram Strait
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          transifs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    strairx
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             N m-2
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Eastward Atmospheric Stress On Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          strairx
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    strairy
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             N m-2
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Northward Atmospheric Stress On Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          strairy
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    strocnx
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             N m-2
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Eastward Ocean Stress On Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          strocnx
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    strocny
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             N m-2
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Northward Ocean Stress On Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          strocny
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    streng
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             N m-2
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Compressive Sea Ice Strength
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          streng
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    divice
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             s-1
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Strain Rate Divergence of Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          divice
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    shrice
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             s-1
+cell_methods:      time: mean (weighted by area of sea ice)
+cell_measures:      area: areacello
+long_name:         Strain Rate Shear of Sea Ice
+comment:           When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          shrice
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ridgice
+!============
+modeling_realm:    seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Ice Ridging Rate
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ridgice
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Omon b/Tables/CMIP5_Omon
new file mode 100644
index 0000000..c604633
--- /dev/null
+++ b/Tables/CMIP5_Omon
@@ -0,0 +1,4095 @@
+table_id: Table Omon
+modeling_realm: ocean
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   02 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: basin
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    region
+units:            1
+long_name:        ocean basin
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         basin
+type:             character
+requested:        atlantic_arctic_ocean indian_pacific_ocean global_ocean        ! space-separated list of requested coordinates 
+must_have_bounds: no
+coords_attrib:    region
+!----------------------------------
+!
+
+
+!============
+axis_entry: rho
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+units:            ?
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        density++++?
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         rho
+stored_direction: decreasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: oline
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+units:            1
+long_name:        ocean passage 
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         line
+type:             character
+requested:        barents_opening bering_strait canadian_archipelago denmark_strait drake_passage english_channel pacific_equatorial_undercurrent faroe_scotland_channel florida_bahamas_strait fram_strait iceland_faroe_channel indonesian_thoughflow mozambique_channel taiwan_luzon_straits windward_passage        ! space-separated list of requested coordinates 
+must_have_bounds: no
+coords_attrib:    passage
+!----------------------------------
+!
+
+
+!============
+axis_entry: olayer100m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    depth
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        depth
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         depth
+valid_min:        0         
+valid_max:        100 
+stored_direction: increasing
+type:             double
+value:            50.            ! of scalar (singleton) dimension 
+bounds_values:    0. 100.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: depth100m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    depth
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        depth
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         depth
+valid_min:        80         
+valid_max:        120 
+stored_direction: increasing
+type:             double
+value:            100.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: depth_coord
+!============
+!
+!  This vertical coordinate is used in z-coordinate models 
+!   The units are meters (m), and it has a value of 0. at the surface
+!   and becomes more and more negative with depth.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:	      up
+long_name:        ocean depth coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -12000.
+valid_max:        0.
+!----------------------------------	
+!
+!============
+axis_entry: ocean_double_sigma
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_double_sigma
+axis:             Z
+positive:	  up
+long_name:        ocean double sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= k_c:\n z(k,j,i)= sigma(k)*f(j,i) \n for k > k_c:\n z(k,j,i)= f(j,i) + (sigma(k)-1)*(depth(j,i)-f(j,i)) \n f(j,i)= 0.5*(z1+ z2) + 0.5*(z1-z2)* tanh(2*a/(z1-z2)*(depth(j,i)-href))
+z_factors:        sigma: sigma depth: depth z1: z1 z2: z2 a: a_coeff href: href k_c: k_c
+z_bounds_factors: sigma: sigma_bnds depth: depth z1: z1 z2: z2 a: a href: href k_c: k_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma_z
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_z
+axis:             Z
+long_name:        ocean sigma over z coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= nsigma: z(n,k,j,i) = eta(n,j,i) + sigma(k)*(min(depth_c,depth(j,i))+eta(n,j,i)) ; for k > nsigma: z(n,k,j,i) = zlev(k)
+z_factors:        sigma: sigma eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev
+z_bounds_factors: sigma: sigma_bnds eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: ocean_s
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of s(k), which appears in the formula below, should be stored as ocean_s.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_s.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_s_coordinate
+axis:             Z
+positive:	  up
+long_name:        ocean s-coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i)*(1+s(k)) + depth_c*s(k) + (depth(j,i)-depth_c)*C(k) \n where \n C(k)=(1-b)*sinh(a*s(k))/sinh(a) +\n           b*(tanh(a*(s(k)+0.5))/(2*tanh(0.5*a)) - 0.5)
+z_factors:        s: lev eta: eta depth: depth a: a_coeff b: b_coeff depth_c: depth_c
+z_bounds_factors: s: lev_bnds eta: eta depth: depth a: a b: b depth_c: depth_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of sigma(k), which appears in the formula below, should be stored as ocean_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_coordinate
+axis:             Z
+positive:	      up
+long_name:        ocean sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i) + sigma(k)*(depth(j,i)+eta(n,j,i))
+z_factors:        sigma: lev eta: eta depth: depth
+z_bounds_factors: sigma: lev_bnds eta: eta depth: depth
+!----------------------------------	
+!
+!
+! ***************************************************************
+!
+! Vertical coordinate formula_terms:
+!
+! ***************************************************************
+!
+!============
+variable_entry: eta
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:            m
+cell_methods:     time: mean
+long_name:        Sea Surface Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+type:      real
+!----------------------------------
+!
+!
+!============
+variable_entry: depth
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:        m
+long_name:    Sea Floor Depth
+comment:      Ocean bathymetry.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude
+out_name:  depth
+type:      real
+valid_min:        0
+valid_max:        10000
+ok_min_mean_abs:  2000
+ok_max_mean_abs:  5000
+!----------------------------------
+!
+!
+!============
+variable_entry: sigma
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: depth_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: depth_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: a
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient a
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: b
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient b
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: nsigma
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: nsigma
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+!============
+variable_entry: z1
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z1
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: z2
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z2
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: href
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: href
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: k_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: k_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+
+!============
+variable_entry:    dissic
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Inorganic Carbon Concentration
+comment:           Dissolved inorganic carbon (CO3+HCO3+H2CO3) concentration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dissic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dissoc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Organic Carbon Concentration
+comment:           Dissolved organic carbon concentration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dissoc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Carbon Concentration
+comment:           sum of phytoplankton carbon component concentrations.  In most (all?) cases this is the sum of phycdiat and phycmisc (i.e., ""Diatom Carbon Concentration"" and ""Non-Diatom Phytoplankton Carbon Concentration""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zooc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Zooplankton Carbon Concentration
+comment:           sum of zooplankton carbon component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          zooc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bacc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Bacterial Carbon Concentration
+comment:           sum of bacterial carbon component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bacc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    detoc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Detrital Organic Carbon Concentration
+comment:           sum of detrital organic carbon component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          detoc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    calc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Calcite Concentration
+comment:           sum of particulate calcite component concentrations (e.g. Phytoplankton, Detrital, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          calc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    arag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Aragonite Concentration
+comment:           sum of particulate aragonite components (e.g. Phytoplankton, Detrital, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          arag
+type:              real
+!----------------------------------
+!
+
+
+
+
+
+
+
+
+!============
+variable_entry:    zoocmisc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Other Zooplankton Carbon Concentration
+comment:           carbon from additional zooplankton component concentrations alone (e.g. Micro, meso).  Since the models all have different numbers of components, this variable has been included to provide a check for intercomparison between models since some phytoplankton groups are supersets.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          zoocmisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    talk
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Total Alkalinity
+comment:           total alkalinity equivalent concentration (including carbonate, nitrogen, silicate, and borate components)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          talk
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ph
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         pH
+comment:           negative log of hydrogen ion concentration with the concentration expressed as mol H kg-1.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          ph
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    o2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolve Oxygen Concentration
+comment:           dissolved oxygen gas concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          o2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    no3
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_nitrate_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Nitrate Concentration
+comment:           dissolved nitrate concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          no3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    nh4
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_ammonium_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Ammonium Concentration
+comment:           dissolved ammonium concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          nh4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    po4
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_phosphate_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Phosphate Concentration
+comment:           dissolved Phosphate concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          po4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Iron Concentration
+comment:           dissolved iron concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    si
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_silicate_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Silicate Concentration
+comment:           dissolved silicate concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          si
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    chl
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_phytoplankton_expressed_as_chlorophyll_in_sea_water
+units:             kg m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Total Chlorophyll Mass Concentration
+comment:           sum of chlorophyll from all phytoplankton group concentrations.  In most models this is equal to chldiat+chlmisc, that is the sum of ""Diatom Chlorophyll Mass Concentration"" plus ""Other Phytoplankton Chlorophyll Mass Concentration""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          chl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    chldiat
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Diatom Chlorophyll Mass Concentration
+comment:           chlorophyll from diatom phytoplankton component concentration alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          chldiat
+type:              real
+!----------------------------------
+!
+
+
+
+
+!============
+variable_entry:    chlmisc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Other Phytoplankton Chlorophyll Mass Concentration
+comment:           chlorophyll from additional phytoplankton component concentrations alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          chlmisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pon
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Organic Nitrogen Concentration
+comment:           sum of particulate organic nitrogen component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pon
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pop
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Organic Phosphorus Concentration
+comment:           sum of particulate organic phosphorus component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pop
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Biogenic Iron Concentration
+comment:           sum of particulate organic iron component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bsi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Biogenic Silica Concentration
+comment:           sum of particulate silica component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyn
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_phytoplankton_expressed_as_nitrogen_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Nitrogen Concentration
+comment:           sum of phytoplankton nitrogen component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyp
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Phosphorus Concentration
+comment:           sum of phytoplankton phosphorus components
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Iron Concentration
+comment:           sum of phytoplankton iron component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    physi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Silica Concentration
+comment:           sum of phytoplankton silica component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          physi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dms
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dimethyl Sulphide Concentration
+comment:           dimethyl sulphide concentration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dms
+type:              real
+!----------------------------------
+!
+
+
+
+
+!============
+variable_entry:    intpp
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Primary Organic Carbon Production by All Types of Phytoplankton
+comment:           Vertically integrated total primary (organic carbon) production by phytoplankton.  This should equal the sum of intpdiat+intpphymisc, but those individual components may be unavailable in some models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    intpnew
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Primary Organic Carbon Production by Phytoplankton Based on NO3 Uptake
+comment:           Vertically integrated primary (organic carbon) production by phytoplankton based on NO3 alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpnew
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    intpdiat
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Primary Organic Carbon Production by Diatoms
+comment:           Vertically integrated primary (organic carbon) production by the diatom phytoplankton component alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpdiat
+type:              real
+!----------------------------------
+!
+
+
+
+
+!============
+variable_entry:    intpmisc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Primary Organic Carbon Production by Other Phytoplankton
+comment:           Vertically integrated total primary (organic carbon) production by other phytoplankton components alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpmisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    intpbfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Iron Production
+comment:           Vertically integrated biogenic iron production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpbfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    intpbsi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Silica Production
+comment:           Vertically integrated biogenic silica production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpbsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    intpcalc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Calcite Production
+comment:           Vertically integrated calcite production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpcalc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    intparag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Aragonite Production
+comment:           Vertically integrated aragonite production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intparag
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    epc100
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Downward Flux of Particle Organic Carbon at 100M
+comment:           sinking flux of organic carbon at 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time depth100m
+out_name:          epc100
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    epfe100
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Downward Flux of Particulate Iron at 100M
+comment:           sinking flux of biogenic and scavenged iron at 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time depth100m
+out_name:          epfe100
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    epsi100
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Downward Flux of Particulate Silica at 100M
+comment:           sinking flux of biogenic silica at 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time depth100m
+out_name:          epsi100
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    epcalc100
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Downward Flux of Calcite at 100M
+comment:           sinking flux of calcite at 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time depth100m
+out_name:          epcalc100
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    eparag100
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Downward Flux of Aragonite at 100M
+comment:           sinking flux of aragonite at 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time depth100m
+out_name:          eparag100
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    intdic
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Dissolved Inorganic Carbon Content
+comment:           Vertically integrated DIC
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intdic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    spco2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_partial_pressure_of_carbon_dioxide_in_sea_water
+units:             Pa
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Surface Aqueous Partial Pressure of CO2
+comment:           Surface aqueous partial pressure of CO2
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          spco2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dpco2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             Pa
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Delta PCO2
+comment:           Difference between atmospheric and oceanic partial pressure of CO2 (positive meaning ocean > atmosphere)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          dpco2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dpo2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             Pa
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Delta PO2
+comment:           Difference between atmospheric and oceanic partial pressure of O2 (positive meaning ocean > atmosphere)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          dpo2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fgco2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward CO2 Flux
+comment:           Gas exchange flux of CO2 (positive into ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fgco2
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    fgo2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward O2 Flux
+comment:           Gas exchange flux of O2 (positive into ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fgo2
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    fgdms
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Surface Upward DMS Flux
+comment:           Gas exchange flux of DMS (positive into atmosphere)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fgdms
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fsc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Flux of Carbon Into Ocean Surface by Runoff and Sediment Dissolution
+comment:           Carbon supply to ocean through runoff and sediment dissolution (neglects gas exchange)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fsc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    frc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Downward Carbon Flux at Ocean Bottom
+comment:           Carbon loss to sediments
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          frc
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    intpn2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Nitrogen Fixation Rate in Ocean
+comment:           Vertically integrated nitrogen fixation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          intpn2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fsn
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward Net Flux of Nitrogen
+comment:           N supply through deposition flux onto sea surface, nitrogen fixation, and runoff
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fsn
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    frn
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Nitrogen Loss to Sediments and through Denitrification
+comment:           N loss to sediment and water column denitrification
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          frn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fsfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward Net Flux of Iron
+comment:           Iron supply through deposition flux onto sea surface, runoff, coasts, sediments, etc
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fsfe
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    frfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Iron Loss to Sediments
+comment:           Iron loss to sediments
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          frfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    o2min
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: where sea depth: minimum
+cell_measures:      area: areacello
+long_name:         Oxygen Minimum Concentration
+comment:           Vertical minimum concentration of dissolved oxygen gas
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          o2min
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zo2min
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Depth of Oxygen Minimum Concentration
+comment:           Depth of vertical minimum concentration of dissolved oxygen gas (if two, then the shallower)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          zo2min
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zsatcalc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Calcite Saturation Depth
+comment:           Depth of calcite saturation horizon (0 if < surface, ""missing"" if > bottom, if two, then the shallower)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          zsatcalc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zsatarag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Aragonite Saturation Depth
+comment:           Depth of aragonite saturation horizon (0 if < surface, ""missing""  if > bottom, if two, then the shallower)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          zsatarag
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fddtdic
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Net Dissolved Inorganic Carbon
+comment:           Net time rate of change of dissolved inorganic carbon in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fddtdic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fddtdin
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Net Dissolved Inorganic Nitrogen
+comment:           Net time rate of change of nitrogen nutrients (e.g. NO3+NH4) in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fddtdin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fddtdip
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Net Dissolved Inorganic Phosphate
+comment:           vertical integral of net  time rate of change of phosphate in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fddtdip
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fddtdife
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Net Dissolved Inorganic Iron
+comment:           vertical integral of net time rate of change of dissolved inorganic iron in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fddtdife
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fddtdisi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Net Dissolved Inorganic Silicate
+comment:           vertical integral of net time rate of change of dissolved inorganic silicate in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fddtdisi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fddtalk
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Alkalinity
+comment:           vertical integral of net time rate of change of alkalinity in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fddtalk
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fbddtdic
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Dissolved Inorganic Carbon due to Biological Activity
+comment:           vertical integral of net biological terms in time rate of change of dissolved inorganic carbon in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fbddtdic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fbddtdin
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Dissolved Inorganic Nitrogen due to Biological Activity
+comment:           vertical integral of net biological terms in time rate of change of nitrogen nutrients (e.g. NO3+NH4) in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fbddtdin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fbddtdip
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Dissolved Inorganic Phosphate due to Biological Activity
+comment:           vertical integral of net biological terms in time rate of change of phosphate in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fbddtdip
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fbddtdife
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Dissolved Inorganic Iron due to Biological Activity
+comment:           vertical integral of net biological terms in time rate of change of dissolved inorganic iron in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fbddtdife
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fbddtdisi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Dissolved Inorganic Silicate due to Biological Activity
+comment:           vertical integral of net biological terms in time rate of change of dissolved inorganic silicate in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fbddtdisi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fbddtalk
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Rate of Change in Upper 100 m of Biological Alkalinity due to Biological Activity
+comment:           vertical integral of net biological terms in time rate of change of alkalinity in upper 100m
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time olayer100m
+out_name:          fbddtalk
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    masso
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_mass
+units:             kg 
+cell_methods:      time: mean area: sum where sea
+long_name:         Sea Water Mass 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          masso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pbo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_pressure_at_sea_floor
+units:             dbar 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Water Pressure at Sea floor 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pbo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pso
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_pressure_at_sea_water_surface
+units:             dbar 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Water Pressure at Sea Water Surface 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    volo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_volume
+units:             m3
+cell_methods:      time: mean area: sum where sea
+long_name:         Sea Water Volume 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          volo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zos
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_surface_height_above_geoid
+units:             m 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Surface Height Above Geoid 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          zos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zossq
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     square_of_sea_surface_height_above_geoid
+units:             m2
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Square of Sea Surface Height Above Geoid 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          zossq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zosga
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     global_average_sea_level_change
+units:             m 
+cell_methods:      time: mean area: mean where sea
+long_name:         Global Average Sea Level Change 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          zosga
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zossga
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     global_average_steric_sea_level_change
+units:             m 
+cell_methods:      time: mean area: mean where sea
+long_name:         Global Average Steric Sea Level Change 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          zossga
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zostoga
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     global_average_thermosteric_sea_level_change
+units:             m 
+cell_methods:      time: mean area: mean where sea
+long_name:         Global Average Thermosteric Sea Level Change 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          zostoga
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    masscello
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_mass_per_unit_area
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water Mass Per Unit Area 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          masscello
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    thkcello
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cell_thickness
+units:             m 
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Model Cell Thickness 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          thkcello
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    thetao
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_potential_temperature
+units:             K 
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water Potential Temperature 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          thetao
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    thetaoga
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_potential_temperature
+units:             K 
+cell_methods:      time: mean area: mean where sea
+long_name:         Global Average Sea Water Potential Temperature 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          thetaoga
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tos
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_surface_temperature
+units:             K 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Surface Temperature 
+comment:           "this may differ from ""surface temperature"" in regions of sea ice."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tossq
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     square_of_sea_surface_temperature
+units:             K2 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Square of Sea Surface Temperature 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tossq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    so
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_salinity
+units:             psu 
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water Salinity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          so
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    soga
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_salinity
+units:             psu 
+cell_methods:      time: mean area: mean where sea
+long_name:         Global Mean Sea Water Salinity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          soga
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sos
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_surface_salinity
+units:             psu 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Sea Surface Salinity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhopoto
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_potential_density
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water Potential Density 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          rhopoto
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    agessc
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_age_since_surface_contact
+units:             yr 
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water Age Since Surface Contact 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          agessc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cfc11
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     moles_of_cfc11_per_unit_mass_in_sea_water
+units:             mol kg-1 
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Moles Per Unit Mass of CFC-11 in Sea Water 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          cfc11
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftbarot
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_barotropic_mass_streamfunction
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Barotropic Mass Streamfunction 
+comment:           differs from CMIP3 because it includes mass.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          msftbarot
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mlotst
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mixed_layer_thickness_defined_by_sigma_t
+units:             m 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Mixed Layer Thickness De_ned by Sigma T 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mlotst
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mlotstsq
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     square_of_ocean_mixed_layer_thickness_defined_by_sigma_t
+units:             m2
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Square of Ocean Mixed Layer Thickness De_ned by Sigma T 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mlotstsq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    omldamax
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mixed_layer_thickness_defined_by_mixing_scheme
+units:             m 
+cell_methods:      time: maximum within days time: mean over days
+cell_measures:      area: areacello
+long_name:         Mean Daily Maximum Ocean Mixed Layer Thickness De_ned by Mixing Scheme 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          omldamax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    omlmax
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mixed_layer_thickness_defined_by_mixing_scheme
+units:             m 
+cell_methods:      time: maximum
+cell_measures:      area: areacello
+long_name:         Monthly Maximum Ocean Mixed Layer Thickness De_ned by Mixing Scheme 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          omlmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_x_velocity
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water X Velocity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          uo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_water_y_velocity
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Sea Water Y Velocity 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          vo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wmo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upward_ocean_mass_transport
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Upward Ocean Mass Transport 
+comment:           differs from CMIP3, which only had upward velocity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          wmo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wmosq
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     square_of_upward_ocean_mass_transport
+units:             kg2 s-2
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Square of Upward Ocean Mass Transport 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          wmosq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    umo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mass_x_transport
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Mass X Transport 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          umo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vmo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mass_y_transport
+units:             kg s-1
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Ocean Mass Y Transport 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          vmo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftmyz
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_meridional_overturning_mass_streamfunction
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Meridional Overturning Mass Streamfunction 
+comment:           function of Y, Z, basin. differs from CMIP3 because it includes mass.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude olevel basin time
+out_name:          msftmyz
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftmrhoz
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_meridional_overturning_mass_streamfunction
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Meridional Overturning Mass Streamfunction 
+comment:           function of of Y-rho-basin.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude rho basin time
+out_name:          msftmrhoz
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftyyz
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_y_overturning_mass_streamfunction
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Y Overturning Mass Streamfunction 
+comment:           function of Y, Z, basin. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude olevel basin time
+out_name:          msftyyz
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftyrhoz
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_y_overturning_mass_streamfunction
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Y Overturning Mass Streamfunction 
+comment:           function of Y, rho, basin.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude rho basin time
+out_name:          msftyrhoz
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftmyzba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_meridional_overturning_mass_streamfunction_due_to_bolus_advection
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Meridional Overturning Mass Streamfunction due to Bolus Advection 
+comment:           function of Y, Z, basin. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude olevel basin time
+out_name:          msftmyzba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftmrhozba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_meridional_overturning_mass_streamfunction_due_to_bolus_advection
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Meridional Overturning Mass Streamfunction due to Bolus Advection 
+comment:           function of Y, rho, basin.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude rho basin time
+out_name:          msftmrhozba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftyyzba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_y_overturning_mass_streamfunction_due_to_bolus_advection
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Y Overturning Mass Streamfunction due to Bolus Advection 
+comment:           function of Y, Z, basin. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude olevel basin time
+out_name:          msftyyzba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    msftyrhozba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_y_overturning_mass_streamfunction_due_to_bolus_advection
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Ocean Y Overturning Mass Streamfunction due to Bolus Advection 
+comment:           function of Y, rho, basin.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude rho basin time
+out_name:          msftyrhozba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfnorth
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_heat_transport
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Northward Ocean Heat Transport 
+comment:           For a model with a cartesian latxlon grid, this is the same as the ""Ocean Heat Y Transport"" in line 108.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfnorth
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfnorthba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_heat_transport_due_to_bolus_advection
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Northward Ocean Heat Transport due to Bolus Advection 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfnorthba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfnorthdiff
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_heat_transport_due_to_diffusion
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Northward Ocean Heat Transport due to Diffusion 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfnorthdiff
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfx
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_heat_x_transport
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Heat X Transport 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfx
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfy
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_heat_y_transport
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Heat Y Transport 
+comment:           For a model with a cartesian latxlon grid, this is the same as the ""Northward Ocean Heat Transport"" in line 104.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfy
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfxba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_heat_x_transport_due_to_bolus_advection
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Heat X Transport due to Bolus Advection 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfxba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfxdiff
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_heat_x_transport_due_to_diffusion
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Heat X Transport due to Diffusion 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfxdiff
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfyba
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_heat_y_transport_due_to_bolus_advection
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Heat Y Transport due to Bolus Advection 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfyba
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfydiff
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_heat_y_transport_due_to_diffusion
+units:             W 
+cell_methods:      time: mean
+cell_measures:      area: areacello
+long_name:         Ocean Heat Y Transport due to Diffussion
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfydiff
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    htovgyre
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_heat_transport_due_to_gyre
+units:             W 
+cell_methods:      time: mean longitude: mean
+long_name:         Northward Ocean Heat Transport due to Gyre 
+comment:           function of Y, basin
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude basin time
+out_name:          htovgyre
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    htovovrt
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_heat_transport_due_to_overturning
+units:             W 
+cell_methods:      time: mean longitude: mean
+long_name:         Northward Ocean Heat Transport due to Overturning 
+comment:           function of Y, basin
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude basin time
+out_name:          htovovrt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sltovgyre
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_salt_transport_due_to_gyre
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Northward Ocean Salt Transport due to Gyre 
+comment:           function of Y, basin
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude basin time
+out_name:          sltovgyre
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sltovovrt
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_ocean_salt_transport_due_to_overturning
+units:             kg s-1
+cell_methods:      time: mean longitude: mean
+long_name:         Northward Ocean Salt Transport due to Overturning 
+comment:           function of Y, basin
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        latitude basin time
+out_name:          sltovovrt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mfo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg s-1
+cell_methods:      time: mean
+long_name:         Sea Water Transport
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        oline time
+out_name:          mfo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     rainfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Rainfall Flux where Ice Free Ocean over Sea
+comment:           compute as the total mass of liquid water falling as liquid rain  into the ice-free portion of the ocean divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Snowfall Flux where Ice Free Ocean over Sea
+comment:           compute as the total mass of ice directly falling as snow into the ice-free portion of the ocean divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evs
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Water Evaporation Flux Where Ice Free Ocean over Sea
+comment:           compute as the total mass of water vapor evaporating from the ice-free portion of the ocean  divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    friver
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_flux_into_sea_water_from_rivers
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Water Flux into Sea Water From Rivers 
+comment:           compute as the river flux of water into the ocean divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          friver
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ficeberg
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_flux_into_sea_water_from_icebergs
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello volume: volcello
+long_name:         Water Flux into Sea Water From Icebergs 
+comment:           compute as the iceberg melt water  flux into the ocean divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          ficeberg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fsitherm
+!============
+modeling_realm:    ocean seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_flux_into_sea_water_due_to_sea_ice_thermodynamics
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Water Flux into Sea Water due to Sea Ice Thermodynamics 
+comment:           compute as the sea ice thermodynamic water flux into the ocean divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fsitherm
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wfo
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_flux_into_sea_water
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Water Flux into Sea Water 
+comment:           compute as the water  flux into the ocean divided by the area of the ocean portion of the grid cell.  This is the sum of the next two variables in this table.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wfo
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wfonocorr
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_flux_into_sea_water_without_flux_correction
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Water Flux into Sea Water Without Flux Correction 
+comment:           compute as the water  flux (without flux correction) into the ocean divided by the area of the ocean portion of the grid cell.  This is the sum of the first 6 variables in this table?
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wfonocorr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wfcorr 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_flux_correction
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Water Flux Correction 
+comment:           If this does not vary from one year to the next, report only a single year.  Positive flux implies correction adds water to ocean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wfcorr 
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    vsfpr
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     virtual_salt_flux_into_sea_water_due_to_rainfall
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Virtual Salt Flux into Sea Water due to Rainfall 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsfpr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsfevap
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     virtual_salt_flux_into_sea_water_due_to_evaporation
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Virtual Salt Flux into Sea Water due to Evaporation 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsfevap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsfriver
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     virtual_salt_flux_into_sea_water_from_rivers
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Virtual Salt Flux into Sea Water From Rivers 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsfriver
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsfsit
+!============
+modeling_realm:    ocean seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     virtual_salt_flux_into_sea_water_due_to_sea_ice_thermodynamics
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Virtual Salt Flux into Sea Water due to Sea Ice Thermodynamics 
+comment:           This variable measures the virtual salt flux into sea water due to the melting of sea ice. It is set to zero in models which receive a real water flux.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsfsit
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsf
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     virtual_salt_flux_into_sea_water
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Virtual Salt Flux into Sea Water 
+comment:           If this does not vary from one year to the next, report only a single year.  Positive flux implies correction increases salinity of water.  This includes all virtual salt flux, including that due to a salt flux correction.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsf
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsfcorr 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     virtual_salt_flux_correction
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Virtual Salt Flux Correction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsfcorr 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfdsi
+!============
+modeling_realm:    ocean seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downward_sea_ice_basal_salt_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Downward Sea Ice Basal Salt Flux
+comment:           This field is physical, and it arises since sea ice has a nonzero salt content, so it exchanges salt with the liquid ocean upon melting and freezing.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sfdsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfriver
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     salt_flux_into_sea_water_from_rivers
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Salt Flux into Sea Water from Rivers 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sfriver
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfgeou
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upward_geothermal_heat_flux_at_sea_floor
+units:             W m-2
+cell_methods:      time: mean area: whre sea
+cell_measures:      area: areacello
+long_name:         Upward Geothermal Heat Flux at Sea Floor 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfgeou
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfrainds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     temperature_flux_due_to_rainfall_expressed_as_heat_flux_into_sea_water
+units:             W m-2
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Temperature Flux due to Rainfall Expressed as Heat Flux into Sea Water 
+comment:           This is defined as ""where ice_free_sea over sea""; i.e., compute the total flux (considered here) entering the ice-free portion of the grid cell divided by the area of the ocean portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfrainds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfevapds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     temperature_flux_due_to_evaporation_expressed_as_heat_flux_out_of_sea_water
+units:             W m-2
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Temperature Flux due to Evaporation Expressed as Heat Flux Out of Sea Water 
+comment:           "This is defined as ""where ice_free_sea over sea"""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfevapds
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfrunoffds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     temperature_flux_due_to_runoff_expressed_as_heat_flux_into_sea_water
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello volume: volcello
+long_name:         Temperature Flux due to Runoff Expressed as Heat Flux into Sea Water 
+comment:           In general this should be reported as a function of depth, (i.e.,  it will be a function of the generic ""XYZ"" dimensions).  Include enough depth levels to represent  the non-zero values of this field everywhere on the globe. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          hfrunoffds
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfsnthermds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     heat_flux_into_sea_water_due_to_snow_thermodynamics
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello volume: volcello
+long_name:         Heat Flux into Sea Water due to Snow Thermodynamics 
+comment:           In general this should be reported as a function of depth, (i.e.,  it will be a function of the generic ""XYZ"" dimensions).  Include enough depth levels to represent  the non-zero values of this field everywhere on the globe. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          hfsnthermds
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfsithermds
+!============
+modeling_realm:    ocean seaIce
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     heat_flux_into_sea_water_due_to_sea_ice_thermodynamics
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello volume: volcello
+long_name:         Heat Flux into Sea Water due to Sea Ice Thermodynamics 
+comment:           In general this should be reported as a function of depth, (i.e.,  it will be a function of the generic ""XYZ"" dimensions).  Include enough depth levels to represent  the non-zero values of this field everywhere on the globe. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          hfsithermds
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfibthermds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     heat_flux_into_sea_water_due_to_iceberg_thermodynamics
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello volume: volcello
+long_name:         Heat Flux into Sea Water due to Iceberg Thermodynamics 
+comment:           In general this should be reported as a function of depth, (i.e.,  it will be a function of the generic ""XYZ"" dimensions).  Include enough depth levels to represent  the non-zero values of this field everywhere on the globe. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          hfibthermds
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_net_downward_longwave_flux
+units:             W m-2
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Surface Net Downward Longwave Radiation
+comment:           "This is defined as ""where ice_free_sea over sea"""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Surface Downward Latent Heat Flux
+comment:           "This is defined as ""where ice_free_sea over sea"""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean area: mean where ice_free_sea over sea
+cell_measures:      area: areacello
+long_name:         Surface Downward Sensible Heat Flux
+comment:           "This is defined as ""where ice_free_sea over sea"""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsntds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Net Downward Shortwave Radiation at Sea Water Surface 
+comment:           This is the flux into the surface of liquid sea water only. This excludes shortwave flux absorbed by sea ice, but includes any light that passes through the ice and is absorbed by the ocean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsntds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_sea_water
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello volume: volcello
+long_name:         Downwelling Shortwave Radiation in Sea Water 
+comment:           In general the shortwave flux should be reported as a function of ocean depth, (i.e.,  it will be a function of the generic ""XYZ"" dimensions).  Include enough depth levels to represent  the non-zero values of this field everywhere on the globe. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfcorr 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     heat_flux_correction
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Heat Flux Correction 
+comment:           If this does not vary from one year to the next, report only a single year.  Positive indicates correction adds heat to ocean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfcorr 
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfds
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Downward Heat Flux at Sea Water Surface
+comment:           "This is the net flux of heat entering the liquid water column through its upper surface (excluding any ""flux adjustment"") ."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauuo 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_x_stress
+units:             N m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward X Stress 
+comment:           This is the stress on the liquid ocean from overlying atmosphere, sea ice, ice shelf, etc.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauuo 
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauvo 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_y_stress
+units:             N m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward Y Stress 
+comment:           This is the stress on the liquid ocean from overlying atmosphere, sea ice, ice shelf, etc.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauvo 
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauucorr 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_x_stress_correction
+units:             N m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward X Stress Correction 
+comment:           This is the stress on the liquid ocean from overlying atmosphere, sea ice, ice shelf, etc.  If this does not vary from one year to the next, report only a single year.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauucorr 
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauvcorr 
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_y_stress_correction
+units:             N m-2
+cell_methods:      time: mean area: mean where sea
+cell_measures:      area: areacello
+long_name:         Surface Downward Y Stress Correction 
+comment:           This is the stress on the liquid ocean from overlying atmosphere, sea ice, ice shelf, etc.  If this does not vary from one year to the next, report only a single year.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauvcorr 
+type:              real
+positive:          down
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_Oyr b/Tables/CMIP5_Oyr
new file mode 100644
index 0000000..5cadb76
--- /dev/null
+++ b/Tables/CMIP5_Oyr
@@ -0,0 +1,1711 @@
+table_id: Table Oyr
+modeling_realm: ocean
+
+frequency: yr
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  365.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: depth_coord
+!============
+!
+!  This vertical coordinate is used in z-coordinate models 
+!   The units are meters (m), and it has a value of 0. at the surface
+!   and becomes more and more negative with depth.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:	      up
+long_name:        ocean depth coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -12000.
+valid_max:        0.
+!----------------------------------	
+!
+!============
+axis_entry: ocean_double_sigma
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_double_sigma
+axis:             Z
+positive:	  up
+long_name:        ocean double sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= k_c:\n z(k,j,i)= sigma(k)*f(j,i) \n for k > k_c:\n z(k,j,i)= f(j,i) + (sigma(k)-1)*(depth(j,i)-f(j,i)) \n f(j,i)= 0.5*(z1+ z2) + 0.5*(z1-z2)* tanh(2*a/(z1-z2)*(depth(j,i)-href))
+z_factors:        sigma: sigma depth: depth z1: z1 z2: z2 a: a_coeff href: href k_c: k_c
+z_bounds_factors: sigma: sigma_bnds depth: depth z1: z1 z2: z2 a: a href: href k_c: k_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma_z
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_z
+axis:             Z
+long_name:        ocean sigma over z coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= nsigma: z(n,k,j,i) = eta(n,j,i) + sigma(k)*(min(depth_c,depth(j,i))+eta(n,j,i)) ; for k > nsigma: z(n,k,j,i) = zlev(k)
+z_factors:        sigma: sigma eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev
+z_bounds_factors: sigma: sigma_bnds eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: ocean_s
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of s(k), which appears in the formula below, should be stored as ocean_s.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_s.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_s_coordinate
+axis:             Z
+positive:	  up
+long_name:        ocean s-coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i)*(1+s(k)) + depth_c*s(k) + (depth(j,i)-depth_c)*C(k) \n where \n C(k)=(1-b)*sinh(a*s(k))/sinh(a) +\n           b*(tanh(a*(s(k)+0.5))/(2*tanh(0.5*a)) - 0.5)
+z_factors:        s: lev eta: eta depth: depth a: a_coeff b: b_coeff depth_c: depth_c
+z_bounds_factors: s: lev_bnds eta: eta depth: depth a: a b: b depth_c: depth_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of sigma(k), which appears in the formula below, should be stored as ocean_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_coordinate
+axis:             Z
+positive:	      up
+long_name:        ocean sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i) + sigma(k)*(depth(j,i)+eta(n,j,i))
+z_factors:        sigma: lev eta: eta depth: depth
+z_bounds_factors: sigma: lev_bnds eta: eta depth: depth
+!----------------------------------	
+!
+!
+! ***************************************************************
+!
+! Vertical coordinate formula_terms:
+!
+! ***************************************************************
+!
+!============
+variable_entry: eta
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:            m
+cell_methods:     time: mean
+long_name:        Sea Surface Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+type:      real
+!----------------------------------
+!
+!
+!============
+variable_entry: depth
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:        m
+long_name:    Sea Floor Depth
+comment:      Ocean bathymetry.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude
+out_name:  depth
+type:      real
+valid_min:        0
+valid_max:        10000
+ok_min_mean_abs:  2000
+ok_max_mean_abs:  5000
+!----------------------------------
+!
+!
+!============
+variable_entry: sigma
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: depth_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: depth_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: a
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient a
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: b
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient b
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: nsigma
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: nsigma
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+!============
+variable_entry: z1
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z1
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: z2
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z2
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: href
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: href
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: k_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: k_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+
+!============
+variable_entry:    dissic
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Inorganic Carbon Concentration
+comment:           Dissolved inorganic carbon (CO3+HCO3+H2CO3) concentration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dissic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dissoc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Organic Carbon Concentration
+comment:           Dissolved organic carbon concentration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dissoc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Carbon Concentration
+comment:           sum of phytoplankton carbon component concentrations.  In most (all?) cases this is the sum of phycdiat and phycmisc (i.e., ""Diatom Carbon Concentration"" and ""Non-Diatom Phytoplankton Carbon Concentration""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zooc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Zooplankton Carbon Concentration
+comment:           sum of zooplankton carbon component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          zooc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bacc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Bacterial Carbon Concentration
+comment:           sum of bacterial carbon component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bacc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    detoc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Detrital Organic Carbon Concentration
+comment:           sum of detrital organic carbon component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          detoc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    calc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Calcite Concentration
+comment:           sum of particulate calcite component concentrations (e.g. Phytoplankton, Detrital, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          calc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    arag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Aragonite Concentration
+comment:           sum of particulate aragonite components (e.g. Phytoplankton, Detrital, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          arag
+type:              real
+!----------------------------------
+!
+
+
+
+
+
+
+
+
+!============
+variable_entry:    zoocmisc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Other Zooplankton Carbon Concentration
+comment:           carbon from additional zooplankton component concentrations alone (e.g. Micro, meso).  Since the models all have different numbers of components, this variable has been included to provide a check for intercomparison between models since some phytoplankton groups are supersets.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          zoocmisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    talk
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Total Alkalinity
+comment:           total alkalinity equivalent concentration (including carbonate, nitrogen, silicate, and borate components)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          talk
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ph
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         pH
+comment:           negative log of hydrogen ion concentration with the concentration expressed as mol H kg-1.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          ph
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    o2
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolve Oxygen Concentration
+comment:           dissolved oxygen gas concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          o2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    no3
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_nitrate_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Nitrate Concentration
+comment:           dissolved nitrate concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          no3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    nh4
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_ammonium_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Ammonium Concentration
+comment:           dissolved ammonium concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          nh4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    po4
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_phosphate_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Phosphate Concentration
+comment:           dissolved Phosphate concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          po4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Iron Concentration
+comment:           dissolved iron concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    si
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_silicate_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dissolved Silicate Concentration
+comment:           dissolved silicate concentration in sea water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          si
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    chl
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_phytoplankton_expressed_as_chlorophyll_in_sea_water
+units:             kg m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Total Chlorophyll Mass Concentration
+comment:           sum of chlorophyll from all phytoplankton group concentrations.  In most models this is equal to chldiat+chlmisc, that is the sum of ""Diatom Chlorophyll Mass Concentration"" plus ""Other Phytoplankton Chlorophyll Mass Concentration""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          chl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    chldiat
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Diatom Chlorophyll Mass Concentration
+comment:           chlorophyll from diatom phytoplankton component concentration alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          chldiat
+type:              real
+!----------------------------------
+!
+
+
+
+
+!============
+variable_entry:    chlmisc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Other Phytoplankton Chlorophyll Mass Concentration
+comment:           chlorophyll from additional phytoplankton component concentrations alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          chlmisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pon
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Organic Nitrogen Concentration
+comment:           sum of particulate organic nitrogen component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pon
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pop
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Organic Phosphorus Concentration
+comment:           sum of particulate organic phosphorus component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pop
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Biogenic Iron Concentration
+comment:           sum of particulate organic iron component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bsi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particulate Biogenic Silica Concentration
+comment:           sum of particulate silica component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyn
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_concentration_of_phytoplankton_expressed_as_nitrogen_in_sea_water
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Nitrogen Concentration
+comment:           sum of phytoplankton nitrogen component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyp
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Phosphorus Concentration
+comment:           sum of phytoplankton phosphorus components
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phyfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Iron Concentration
+comment:           sum of phytoplankton iron component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phyfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    physi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Phytoplankton Silica Concentration
+comment:           sum of phytoplankton silica component concentrations
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          physi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dms
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Dimethyl Sulphide Concentration
+comment:           dimethyl sulphide concentration
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dms
+type:              real
+!----------------------------------
+!
+
+
+
+
+!============
+variable_entry:    pp
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Primary Carbon Production by Phytoplankton
+comment:           total primary (organic carbon) production by phytoplankton
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pnew
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Primary Carbon Production by Phytoplankton Based on NO3 Alone
+comment:           Primary (organic carbon) production by phytoplankton based on NO3 alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pnew
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pbfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Biogenic Iron Production
+comment:           Biogenic iron production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pbfe
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pbsi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Biogenic Silica Production
+comment:           Biogenic silica production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pbsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pcalc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Calcite Production
+comment:           calcite production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pcalc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    parag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Aragonite Production
+comment:           aragonite production
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          parag
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    expc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Sinking Particulate Organic Carbon Flux
+comment:           sinking flux of organic carbon
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          expc
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    expn
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Sinking Particulate Organic Nitrogen Flux
+comment:           sinking flux of organic nitrogen
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          expn
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    expp
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+long_name:         Sinking Particulate Organic Phosphorus Flux
+comment:           sinking flux of organic phosphorus
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          expp
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    expcfe
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+long_name:         Sinking Particulate Iron Flux
+comment:           sinking flux of iron
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          expcfe
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    expsi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Sinking Particulate Silica Flux
+comment:           sinking flux of silica
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          expsi
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    expcalc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Sinking Calcite Flux
+comment:           sinking flux of calcite
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          expcalc
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    exparag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-2 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Sinking Aragonite Flux
+comment:           sinking flux of aragonite
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          exparag
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    dcalc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Calcite Dissolution
+comment:           calcite dissolution
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          dcalc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    darag
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Aragonite Dissolution
+comment:           aragonite dissolution
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          darag
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pdi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Diatom Primary Carbon Production
+comment:           Primary (organic carbon) production by the diatom component alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          pdi
+type:              real
+!----------------------------------
+!
+
+
+
+
+!============
+variable_entry:    phypmisc
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Other Phytoplankton Carbon Production
+comment:           Primary (organic carbon) production by other phytoplankton components alone
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          phypmisc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bddtdic
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Rate of Change of Dissolved Inorganic Carbon due to Biological Activity
+comment:           Net of biological terms in time rate of change of dissolved inorganic carbon
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bddtdic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bddtdin
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Rate of Change of Nitrogen Nutrient due to Biological Activity
+comment:           Net of biological terms in time rate of change of nitrogen nutrients (e.g. NO3+NH4)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bddtdin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bddtdip
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Rate of Change of Dissolved Phosphate due to Biological Activity
+comment:           Net of biological terms in time rate of change of dissolved phosphate
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bddtdip
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bddtdife
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Rate of Change of Dissolved Inorganic Iron due to Biological Activity
+comment:           Net of biological terms in time rate of change of dissolved inorganic iron
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bddtdife
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bddtdisi
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Rate of Change of Dissolved Inorganic Silicate due to Biological Activity
+comment:           Net of biological terms in time rate of change of dissolved inorganic silicate
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bddtdisi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    bddtalk
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Rate of Change of Alkalinity due to Biological Activity
+comment:           Net of biological terms in time rate of change of alkalinity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          bddtalk
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fescav
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Nonbiogenic Iron Scavenging
+comment:           Dissolved Fe removed through nonbiogenic scavenging onto particles
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          fescav
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fediss
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Particle Source of Dissolved Iron
+comment:           Dissolution, remineralization and desorption of iron back to the dissolved phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          fediss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    graz
+!============
+modeling_realm:    ocnBgchem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             mol m-3 s-1
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacello volume: volcello
+long_name:         Total Grazing of Phytoplankton by Zooplankton
+comment:           Total grazing of phytoplankton by zooplankton
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude olevel time
+out_name:          graz
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_aero b/Tables/CMIP5_aero
new file mode 100644
index 0000000..424142c
--- /dev/null
+++ b/Tables/CMIP5_aero
@@ -0,0 +1,2289 @@
+table_id: Table aero
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: alev1
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+long_name:        lowest atmospheric model level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+!
+!============
+variable_entry: ps
+!============
+modeling_realm:  atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  surface_air_pressure
+units:         Pa
+cell_methods:     time: mean
+long_name:          Surface Air Pressure
+comment:      not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+out_name:  ps
+type:      real
+!
+
+!============
+variable_entry:    od550aer
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_optical_thickness_due_to_ambient_aerosol
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ambient Aerosol Opitical Thickness at 550 nm
+comment:           atmosphere_optical_thickness_due_to_ambient_aerosol: AOD from the ambient aerosls (i.e., includes aerosol water).  Does not include AOD from stratospheric aerosols if these are prescribed but includes other possible background aerosol types.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          od550aer
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    od550lt1aer
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_optical_thickness_due_to_pm1_ambient_aerosol
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ambient Fine Aerosol Opitical Thickness at 550 nm
+comment:           atmosphere_optical_thickness_due_to_pm1_ambient_aerosol: od550 due to particles with wet diameter less than 1 um  (""ambient"" means ""wetted""). When models do not include explicit size information, it can be assumed that all anthropogenic aerosols and natural secondary aerosols have diameter less than 1 um. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          od550lt1aer
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    abs550aer
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_absorption_optical_thickness_due_to_ambient_aerosol
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ambient Aerosol Absorption Optical Thickness at 550 nm
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          abs550aer
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    od870aer
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_optical_thickness_due_to_ambient_aerosol
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ambient Aerosol Opitical Thickness at 870 nm
+comment:           atmosphere_optical_thickness_due_to_ambient_aerosol: AOD from the ambient aerosls (i.e., includes aerosol water).  Does not include AOD from stratospheric aerosols if these are prescribed but includes other possible background aerosol types.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          od870aer
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emioa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_due_to_net_chemical_production_and_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Rate of Emission and Production of Dry Aerosol Total Organic Matter
+comment:           tendency of atmosphere mass content of organic matter dry aerosol due to net production and emission.  This is the sum of total emission of POA and total production of SOA (see next two entries), and it should only be reported if POA and SOA cannot be separately reported. ""Mass"" refers to the mass of organic matter, not mass of organic carbon alone. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emioa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emipoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Emission Rate of Dry Aerosol Primary Organic Matter
+comment:           tendency of atmosphere mass content of primary organic aerosol due to emission:  ""mass"" refers to the mass of primary organic matter, not mass of organic carbon alone.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emipoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    chepsoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_due_to_net_chemical_production
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Production Rate of Dry Aerosol Secondary Organic Matter
+comment:           tendency of atmosphere mass content of secondary organic matter_dry aerosol due to net production:  If model lumps SOA emissions with POA, then report the sum of POA and SOA emissions as POA emissions.  ""mass"" refers to the mass of primary organic matter, not mass of organic carbon alone.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          chepsoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emibc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Emission Rate of Black Carbon Aerosol Mass
+comment:           tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_emission
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emibc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dryoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of Dry Aerosol Organic Matter
+comment:           tendency_of_atmosphere_mass_content_of_organic_dry_aerosol_due_to_dry_deposition: This is the sum of dry deposition of POA and dry deposition of SOA (see next two entries), and it should only be reported if POA and SOA cannot be separately reported. ""Mass"" refers to the mass of organic matter, not mass of organic carbon alone. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          dryoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drypoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of Dry Aerosol Primary Organic Matter
+comment:           tendency_of_atmosphere_mass_content_of_primary_organic_matter_dry_aerosol_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drypoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drysoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of Dry Aerosol Secondary Organic Matter
+comment:           tendency_of_atmosphere_mass_content_of_secondary_organic_dry_aerosol_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drysoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drybc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of Black Carbon Aerosol Mass
+comment:           tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drybc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of Dry Aerosol Organic Matter
+comment:           tendency_of_atmosphere_mass_content_of_organic_matter_dry_aerosols_due_to_wet_deposition: This is the sum of wet deposition of POA and wet deposition of SOA (see next two entries), and it should only be reported if POA and SOA cannot be separately reported. ""Mass"" refers to the mass of organic matter, not mass of organic carbon alone. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetpoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of Dry Aerosol Primary Organic Matter
+comment:           tendency_of_atmosphere_mass_content_of_primary_organic_matter_dry_aerosols_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetpoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetsoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of Dry Aerosol Secondary Organic Matter
+comment:           tendency_of_atmosphere_mass_content_of_secondary_organic_dry_aerosol_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetsoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetbc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of Black Carbon Aerosol Mass
+comment:           tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetbc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emibb
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Emission of Primary Aerosol from Biomass Burning
+comment:           tendency of atmosphere mass content of primary organic matter dry aerosol due to emission: This does not include sources of secondary aerosols from biomass burning aerosols, such as SO2 or SOA. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emibb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emiso2
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Emission Rate of SO2
+comment:           tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_emission: mass refers to SO2, not S.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emiso2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emiso4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Direct Emission Rate of SO4
+comment:           tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_due_to_net_production_and_emission: mass refers to SO4, not S
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emiso4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emidms
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Emission Rate of DMS
+comment:           tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_emission: mass refers to DMS, not S
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emidms
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dryso2
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of SO2
+comment:           tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          dryso2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dryso4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of SO4
+comment:           tendency_of_atmosphere_mass_content_of_sulfate_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          dryso4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drydms
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of DMS
+comment:           tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_dry_deposition: omit if DMS is not dry deposited in the model.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drydms
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetso4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_sulfate_expressed_as_sulfur_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of SO4
+comment:           tendency_of_atmosphere_mass_content_of_sulfate_expressed_as_sulfur_dry_aerosol_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetso4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetso2
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of SO2
+comment:           tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetso2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetdms
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of DMS
+comment:           tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_wet_deposition: omit if DMS is not wet deposited in the model.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetdms
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    eminh3
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_ammonia_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Emission Rate of NH3
+comment:           tendency_of_atmosphere_mass_content_of_ammonia_due_to_emission
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          eminh3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drynh3
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_ammonia_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of NH3
+comment:           tendency_of_atmosphere_mass_content_of_ammonia_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drynh3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drynh4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of NH4
+comment:           tendency_of_atmosphere_mass_content_of_ammonium_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drynh4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetnh4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of NH4+NH3
+comment:           tendency_of_atmosphere_mass_content_of_ammonium_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetnh4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emiss
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Emission Rate of Seasalt
+comment:           tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_emission
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emiss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dryss
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of Seasalt
+comment:           tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          dryss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetss
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of Seasalt
+comment:           tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    emidust
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_emission
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Emission Rate of Dust
+comment:           tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_emission
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          emidust
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    drydust
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_dry_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Dry Deposition Rate of Dust
+comment:           tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_dry_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          drydust
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wetdust
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_wet_deposition
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Wet Deposition Rate of Dust
+comment:           tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_wet_deposition
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          wetdust
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of Dry Aerosol Organic Matter
+comment:           atmosphere dry organic content: This is the vertically integrated sum of atmosphere_primary_organic_content and atmosphere_secondary_organic_content (see next two table entries), and therefore should only be reported if those two components cannot be separately reported. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadpoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of Dry Aerosol Primary Organic Matter
+comment:           atmosphere_primary_organic_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadpoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadsoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of Dry Aerosol Secondary Organic Matter
+comment:           atmosphere_secondary_organic_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadsoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadbc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_black_carbon_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of Black Carbon Aerosol
+comment:           atmosphere_black_carbon_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadbc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadso4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_sulfate_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of SO4
+comment:           atmosphere_sulfate_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadso4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loaddust
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_dust_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of Dust
+comment:           atmosphere_dust_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loaddust
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadss
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_seasalt_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of Seasalt
+comment:           atmosphere_seasalt_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadno3
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_nitrate_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of NO3
+comment:           atmosphere_nitrate_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadno3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    loadnh4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_mass_content_of_ammonium_dry_aerosol
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Load of NH4
+comment:           atmosphere_ammonium_content
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          loadnh4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_particulate_organic_matter_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of Dry Aerosol Organic Matter
+comment:           mass_concentration_of_organic_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  This is the sum of concentrations of primary and secondary organic aerosol (see next two table entries), and therefore should only be reported if those two components cannot be separately reported.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcpoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_primary_particulate_organic_matter_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of Dry Aerosol Primary Organic Matter
+comment:           mass_concentration_of_primary_organic_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcpoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcsoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_secondary_particulate_organic_matter_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of Dry Aerosol Secondary Organic Matter
+comment:           mass_concentration_of_secondary_organic_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  If the model lumps SOA with POA, then report their sum as POA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcsoa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcbc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_black_carbon_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of Black Carbon Aerosol
+comment:           mass_concentration_of_black_carbon_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcbc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcso4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_sulfate_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of SO4
+comment:           mass_concentration_of_sulfate_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcso4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcdust
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_dust_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of Dust
+comment:           mass_concentration_of_dust_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcdust
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcss
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_seasalt_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of Seasalt
+comment:           mass_concentration_of_seasalt_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcno3
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_nitrate_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of NO3
+comment:           mass_concentration_of_nitrate_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcno3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sconcnh4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_ammonium_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Concentration of NH4
+comment:           mass_concentration_of_ammonium_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alev1, time
+out_name:          sconcnh4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdsdiff
+!============
+modeling_realm:    aerosol land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Diffuse Downward Shortwave Radiation
+comment:           downwelling_diffuse_shortwave_flux_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdsdiff
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscsdiff
+!============
+modeling_realm:    aerosol land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Diffuse Downward Clear Sky Shortwave Radiation
+comment:           downwelling_diffuse_shortwave_flux_in_air_assuming_clear_sky
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscsdiff
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclwtop
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud-Top Effective Droplet Radius
+comment:           Droplets are liquid only.  Report effective radiaus ""as seen from space"" over liquid cloudy portion of grid cell.  This is the value from uppermost model layer with liquid cloud or, if available, it is better to sum over all liquid cloud tops, no matter where they occur, as long as they are seen from the top of the atmosphere. Weight by total liquid cloud top fraction of  (as seen from TOA) each time sample when computing monthly mean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          reffclwtop
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cldncl
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud Droplet Number Concentration of Cloud Tops
+comment:           Droplets are liquid only.  Report concentration ""as seen from space"" over liquid cloudy portion of grid cell.  This is the value from uppermost model layer with liquid cloud or, if available, it is better to sum over all liquid cloud tops, no matter where they occur, as long as they are seen from the top of the atmosphere. Weight by total liquid cloud top fraction of  (as seen from TOA) each time sample when computing monthly mean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cldncl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cldnci
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ice Crystal Number Concentration of Cloud Tops
+comment:           Report concentration ""as seen from space"" over liquid cloudy portion of grid cell.  This is the value from uppermost model layer with ice cloud or, if available, it is better to sum over all ice cloud tops, no matter where they occur, as long as they are seen from the top of the atmosphere. Weight by total ice cloud top fraction (as seen from TOA) of each time sample when computing monthly mean.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cldnci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cldnvi
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_number_content_of_cloud_droplets
+units:             m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Column Integrated Cloud Droplet Number
+comment:           Droplets are liquid only.  Weight by liquid cloud fraction in each layer when vertically integrating.  Weight by total liquid cloud fraction (as seen from TOA) when reporting monthly mean
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cldnvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ec550aer
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ambient Aerosol Extinction Optical Thickness at 550 nm
+comment:           "atmosphere_extinction_due_to_ambient_aerosol: ""ambient"" means ""wetted"".  This and other fields in this table are 3-D."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          ec550aer
+!----------------------------------
+!
+
+!============
+variable_entry:    concoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_particulate_organic_matter_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Dry Aerosol Organic Matter
+comment:           mass_concentration_of_organic_matter_dry_aerosol_in_air mass concentration of organic matter dry aerosol in air:  This is the sum of concentrations of primary and secondary organic aerosols (see next two table entries), and therefore should only be reported if those two components cannot be separately reported. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concoa
+!----------------------------------
+!
+
+!============
+variable_entry:    concpoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_primary_particulate_organic_matter_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Dry Aerosol Primary Organic Matter
+comment:           mass_concentration_of_primary_organic_matter_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concpoa
+!----------------------------------
+!
+
+!============
+variable_entry:    concsoa
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_secondary_particulate_organic_matter_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Dry Aerosol Secondary Organic Matter
+comment:           mass_concentration_of_secondary_organic_matter_dry_aerosol_in_air: If the model lumps SOA with POA, then report their sum as POA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concsoa
+!----------------------------------
+!
+
+!============
+variable_entry:    concbb
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Biomass Burning Aerosol
+comment:           mass_concentration_of_biomass_burning_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concbb
+!----------------------------------
+!
+
+!============
+variable_entry:    concbc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_black_carbon_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Black Carbon Aerosol
+comment:           mass_concentration_ of_black_carbon_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concbc
+!----------------------------------
+!
+
+!============
+variable_entry:    concaerh2o
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_water_in_ambient_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Aerosol Water 
+comment:           "mass_concentration_of_water_in_ambient_aerosol_in_air: ""ambient"" means ""wetted"""
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concaerh2o
+!----------------------------------
+!
+
+!============
+variable_entry:    concso4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_sulfate_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of SO4
+comment:           mass_concentration_of_sulfate_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concso4
+!----------------------------------
+!
+
+!============
+variable_entry:    concso2
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_sulfur_dioxide_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of SO2
+comment:           mole_fraction_of_sulfur_dioxide_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concso2
+!----------------------------------
+!
+
+!============
+variable_entry:    concdms
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_dimethyl_sulfide_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of DMS
+comment:           mole_concentration_of_dimethyl_sulfide_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concdms
+!----------------------------------
+!
+
+!============
+variable_entry:    concno3
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_nitrate_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of NO3 Aerosol
+comment:           mass_concentration_ of_nitrate_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concno3
+!----------------------------------
+!
+
+!============
+variable_entry:    concnh4
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_ammonium_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of NH4 
+comment:           mass_concentration_of_ammonium_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concnh4
+!----------------------------------
+!
+
+!============
+variable_entry:    concss
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_seasalt_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Seasalt 
+comment:           mass_concentration_ of_seasalt_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concss
+!----------------------------------
+!
+
+!============
+variable_entry:    concdust
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_concentration_of_dust_dry_aerosol_in_air
+units:             kg m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Concentration of Dust 
+comment:           mass_concentration_ of_dust_dry_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concdust
+!----------------------------------
+!
+
+!============
+variable_entry:    conccn
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Aerosol Number Concentration
+comment:           number_concentration_of_ambient_aerosol_in_air
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          conccn
+!----------------------------------
+!
+
+!============
+variable_entry:    concnmcn
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Number Concentration of Nucleation Mode Aerosol
+comment:           number_concentration_of_ambient_aerosol_in_nucleation_mode_in_air: include all particles with diameter smaller than 3 nm
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          concnmcn
+!----------------------------------
+!
+
+!============
+variable_entry:    conccmcn
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Number Concentration Coarse Mode Aerosol
+comment:           number_concentration_of_ambient_aerosol_in_coarse_mode_in_air: include all particles with diameter larger than 1 micron
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          conccmcn
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclws
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_stratiform_cloud_liquid_water_particle
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Stratiform Cloud Droplet Effective Radius
+comment:           Droplets are liquid.  The effective radius is defined as the ratio of the third moment over the second moment of the particle size distribution and the time-mean should be calculated, weighting the individual samples by the cloudy fraction of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          reffclws
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclwc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_convective_cloud_liquid_water_particle
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Cloud Droplet Effective Radius
+comment:           Droplets are liquid.  The effective radius is defined as the ratio of the third moment over the second moment of the particle size distribution and the time-mean should be calculated, weighting the individual samples by the cloudy fraction of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          reffclwc
+!----------------------------------
+!
+
+!============
+variable_entry:    cdnc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud Droplet Number Concentration
+comment:           Cloud droplet number concentration in liquid clouds
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cdnc
+!----------------------------------
+!
+
+!============
+variable_entry:    inc
+!============
+modeling_realm:    aerosol
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             m-3
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ice Crystal Number Concentration
+comment:           Ice Crystal number concentration in ice clouds
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          inc
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_cf3hr b/Tables/CMIP5_cf3hr
new file mode 100644
index 0000000..134d273
--- /dev/null
+++ b/Tables/CMIP5_cf3hr
@@ -0,0 +1,2530 @@
+table_id: Table cf3hr
+modeling_realm: atmos
+
+frequency: 3hr
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: p220
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            22000.            ! of scalar (singleton) dimension 
+bounds_values:    0. 44000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p560
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            56000.            ! of scalar (singleton) dimension 
+bounds_values:    44000. 68000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p840
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            84000.            ! of scalar (singleton) dimension 
+bounds_values:    680. 100000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: alt40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         alt40
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760. 17 [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time1
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: scatratio
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    backscattering_ratio
+units:            1
+long_name:        lidar backscattering ratio
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         scatratio
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested_bounds: 0.01 1.2 3 5 7 10 15 20 25 30 40 50 60 80 999 1009 ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: dbze
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    equivalent_reflectivity_factor
+units:            dBZ
+long_name:        CloudSat simulator equivalent radar reflectivity factor
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         dbze
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        -47.5 -42.5 -37.5 -32.5 -27.5 -22.5 -17.5 -12.5 -7.5 -2.5 2.5 7.5 12.5 17.5 22.5        ! space-separated list of requested coordinates 
+requested_bounds: -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: location
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+units:            1
+long_name:        location index
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         loc
+stored_direction: increasing
+type:             integer
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:      clcalipso 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: point
+long_name:         CALIPSO Cloud Area Fraction
+comment:           (40 height levels)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location alt40 time1
+out_name:            clcalipso 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clcalipso2  
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: point
+long_name:         CALIPSO Cloud Fraction Undetected by CloudSat
+comment:           (40 height levels)  Clouds detected by CALIPSO but below the detectability threshold of CloudSat
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location alt40 time1
+out_name:          clcalipso2  
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cfadDbze94
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     histogram_of_equivalent_reflectivity_factor_over_height_above_reference_ellipsoid
+units:             1
+cell_methods:      time: point
+long_name:         CloudSat Radar Reflectivity CFAD
+comment:           CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location alt40 dbze time1
+out_name:          cfadDbze94
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cfadLidarsr532
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     histogram_of_backscattering_ratio_over_height_above_reference_ellipsoid
+units:             1
+cell_methods:      time: point
+long_name:         CALIPSO Scattering Ratio CFAD
+comment:           CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location alt40 scatratio time1
+out_name:          cfadLidarsr532
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    parasolRefl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_bidirectional_reflectance
+units:             1
+cell_methods:      time: point
+long_name:         PARASOL Reflectance
+comment:           Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location sza5 time1
+out_name:          parasolRefl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cltcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: point
+long_name:         CALIPSO Total Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1
+out_name:          cltcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cllcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: point
+long_name:         CALIPSO Low Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1 p840
+out_name:          cllcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clmcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: point
+long_name:         CALIPSO Mid Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1 p560
+out_name:          clmcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clhcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: point
+long_name:         CALIPSO High Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1 p220
+out_name:          clhcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    lon
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     longitude
+units:             degrees_east
+cell_methods:      time: point
+long_name:         Longitude
+comment:           function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1
+out_name:          lon
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    lat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     latitude
+units:             degrees_north
+cell_methods:      time: point
+long_name:         Latitude
+comment:           function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1
+out_name:          lat
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    toffset
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     time
+units:             day
+long_name:         Offset Time
+comment:           "this ""offset time"" should be added to the value stored in the ""time dimension"" to get the actual time.  This actual time is the time (UTC) of the corresponding point in the satellite orbit used to extract the model data."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        location time1
+out_name:          toffset
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacello volume: volcello
+long_name:         Near-Surface Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ts
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacello volume: volcello
+long_name:         Surface Temperature
+comment:           ""skin"" temperature (i.e., SST for open ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          ts
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: point
+long_name:         Sea Level Pressure
+comment:           not, in general, the same as surface pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: point
+long_name:         Surface Air Pressure
+comment:           not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: point
+long_name:         Eastward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: point
+long_name:         Northward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) northward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: point
+long_name:         Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hurs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: point
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          hurs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: point
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meters) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1 height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Snowfall Flux
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Evaporation
+comment:           at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          evspsbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tauu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_eastward_stress
+units:             Pa
+cell_methods:      time: point
+long_name:         Surface Downward Eastward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          tauu
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauv
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_northward_stress
+units:             Pa
+cell_methods:      time: point
+long_name:         Surface Downward Northward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          tauv
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Incident Shortwave Radiation
+comment:           incident shortwave at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Shortwave Radiation
+comment:           at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere (to be compared with satellite measurements)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    prw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_water_vapor_content
+units:             kg m-2
+cell_methods:      time: point
+long_name:         Water Vapor Path
+comment:           vertically integrated through the atmospheric column
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          prw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: point
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2
+cell_methods:      time: point
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2
+cell_methods:      time: point
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rtmt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_downward_radiative_flux_at_top_of_atmosphere_model
+units:             W m-2
+cell_methods:      time: point
+long_name:         Net Downward Flux at Top of Model
+comment:           i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          rtmt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: point
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          ccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: point
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          cct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ci 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: point
+long_name:         Fraction of Time Convection Occurs
+comment:           Fraction of time that convection occurs in the grid cell .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          ci 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sci
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: point
+long_name:         Fraction of Time Shallow Convection Occurs
+comment:           Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          sci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2antt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg  m-2 s-1
+cell_methods:      time: point
+long_name:         Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          fco2antt
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2fos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          fco2fos
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2nat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources
+comment:           Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e., ""net ecosystem biospheric productivity"", for land, and ""ai [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          fco2nat
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cltc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_cloud_area_fraction
+units:             %
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Convective Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include only convective cloud.  Besides the quantities from the Amon table, this is the only other 2-D field in this table.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time1
+out_name:          cltc
+type:              real
+valid_min:         0
+valid_max:         100
+!----------------------------------
+!
+
+!============
+variable_entry:    zfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     height_above_reference_ellipsoid
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Altitude of Model Full-Levels
+comment:           This is actual height above mean sea level, not geopotential height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          zfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zhalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     height_above_reference_ellipsoid
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Altitude of Model Half-Levels
+comment:           This is actual height above mean sea level, not geopotential height.  This is actual height above mean sea level, not geopotential height.  Include both the top of the model atmosphere and surface levels.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time1
+out_name:          zhalf
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Pressure at Model Full-Levels
+comment:           provide this field for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Pressure at Model Half-Levels
+comment:           provide this field for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time1
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    h2o
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_water_in_air
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Water
+comment:           include all phases of water
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          h2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clws
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_stratiform_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Stratiform Cloud Liquid Water
+comment:           Calculate as the mass of stratiform cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          clws
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clis
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_stratiform_cloud_ice_in_air
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Stratiform Cloud Ice
+comment:           Calculate as the mass of stratiform cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          clis
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clis
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_convective_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Convective Cloud Liquid Water
+comment:           Calculate as the mass of convective cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          clwc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clic
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_convective_cloud_ice_in_air
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Convective Cloud Ice
+comment:           Calculate as the mass of convective cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          clic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclws
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_stratiform_cloud_liquid_water_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Stratiform Cloud Liquid Water 
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffclws
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclis
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_stratiform_cloud_ice_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Stratiform Cloud Ice
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffclis
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclwc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_convective_cloud_liquid_water_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Convective Cloud Liquid Water
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffclwc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffclic
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_convective_cloud_ice_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Convective Cloud Ice
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffclic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    grpllsprof
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     large_scale_graupel_flux
+units:             kg m-2 s-1 
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Stratiform Graupel Flux
+comment:           report on model half-levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          grpllsprof
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prcprof
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_rainfall_flux
+units:             kg m-2 s-1 
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Convective Rainfall Flux
+comment:           report on model half-levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          prcprof
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prlsprof
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     large_scale_rainfall_flux
+units:             kg m-2 s-1 
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Stratiform Rainfall Flux
+comment:           report on model half-levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          prlsprof
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsnc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_snowfall_flux
+units:             kg m-2 s-1 
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Convective Snowfall Flux
+comment:           report on model half-levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          prsnc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prlsns
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     large_scale_snowfall_flux
+units:             kg m-2 s-1 
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Stratiform Snowfall Flux
+comment:           report on model half-levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          prlsns
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffgrpls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_stratiform_cloud_graupel_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Stratiform Graupel
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffgrpls
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffrainc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_convective_cloud_rain_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Convective Rainfall
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffrainc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffrains
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_stratiform_cloud_rain_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Stratiform Rainfall
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffrains
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffsnowc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_convective_cloud_snow_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Convective Snowfall
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffsnowc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    reffsnows
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     effective_radius_of_stratiform_cloud_snow_particle
+units:             m
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Hydrometeor Effective Radius of Stratiform Snowfall
+comment:           This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          reffsnows
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dtaus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_optical_thickness_due_to_stratiform_cloud
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Stratiform Cloud Optical Depth
+comment:           This is the in-cloud optical depth obtained by considering only the cloudy portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          dtaus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dtauc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_optical_thickness_due_to_convective_cloud
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Convective Cloud Optical Depth
+comment:           This is the in-cloud optical depth obtained by considering only the cloudy portion of the grid cell
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          dtauc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    dems
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     stratiform_cloud_longwave_emissivity
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Stratiform Cloud Emissivity
+comment:           This is the in-cloud emissivity obtained by considering only the cloudy portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          dems
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    demc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_cloud_longwave_emissivity
+units:             1
+cell_methods:      time: point
+cell_measures:      area: areacella
+long_name:         Convective Cloud Emissivity
+comment:           This is the in-cloud emissivity obtained by considering only the cloudy portion of the grid cell.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time1
+out_name:          demc
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_cfDa b/Tables/CMIP5_cfDa
new file mode 100644
index 0000000..0f1b809
--- /dev/null
+++ b/Tables/CMIP5_cfDa
@@ -0,0 +1,1608 @@
+table_id: Table cfDa
+modeling_realm: atmos
+
+frequency: da
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   11 March 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time ! space separated required global attribute 
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plev7
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested_bounds: 100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.  0. ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: p500
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            50000.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p700
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            70000.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevbnds
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: alt40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         alt40
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760. 17 [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: tau
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    atmosphere_optical_thickness_due_to_cloud
+units:            1
+long_name:        cloud optical thickness
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         tau
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        0.15 0.8 2.45 6.5 16.2 41.5 100.        ! space-separated list of requested coordinates 
+requested_bounds: 0.0  0.3  0.3  1.3  1.3  3.6  3.6  9.4 9.4 23.0 23.0 60.0 60.0 100000. ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Air Pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Incident Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             % 
+cell_methods:      time: mean
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2 
+cell_methods:      time: mean
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2 
+cell_methods:      time: mean
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap500
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+long_name:         omega (=dp/dt)
+comment:           at 500 hPa level; commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p500
+out_name:          wap500
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta700
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Air Temperature
+comment:           at 700 hPa level
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p700
+out_name:          ta700
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pccb
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pcct
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pcct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+long_name:         Convective Precipitation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cltisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         ISCCP Total Total Cloud Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    albisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_albedo
+units:             1
+cell_methods:      time: mean
+long_name:         ISCCP Mean Cloud Albedo
+comment:           When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          albisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pctisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_cloud_top
+units:             Pa 
+cell_methods:      time: mean
+long_name:         ISCCP Mean Cloud Top Pressure
+comment:           When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pctisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    parsolRefl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_bidirectional_reflectance
+units:             1
+cell_methods:      time: mean
+long_name:         PARASOL Reflectance
+comment:           Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude sza5 time
+out_name:          parsolRefl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cltcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         CALIPSO Total Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cllcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         CALIPSO Low Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cllcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clmcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         CALIPSO Mid Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clmcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clhcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         CALIPSO High Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clhcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1 
+cell_methods:      time: mean
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         Cloud Area Fraction in Atmosphere Layer
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Calculate as the mass of  cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+long_name:         Mass Fraction of Cloud Ice
+comment:           Calculate as the mass of cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_convective_mass_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevbnds time
+out_name:          mc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clcalipso 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         CALIPSO Cloud Fraction
+comment:           40 levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 time
+out_name:          clcalipso 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         ISCCP Cloud Area Fraction
+comment:           7 levels x 7 tau
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude tau plev7 time
+out_name:          clisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Pressure on Model Levels
+comment:           This field is needed only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Pressure on Model Half-Levels
+comment:           This field is needed only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevbnds time
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_cfDay b/Tables/CMIP5_cfDay
new file mode 100644
index 0000000..a739dda
--- /dev/null
+++ b/Tables/CMIP5_cfDay
@@ -0,0 +1,1641 @@
+table_id: Table cfDay
+modeling_realm: atmos
+
+frequency: day
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plev7
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested_bounds: 100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.  0. ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: p500
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            50000.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p700
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            70000.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: alt40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         alt40
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760. 17 [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: tau
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    atmosphere_optical_thickness_due_to_cloud
+units:            1
+long_name:        cloud optical thickness
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         tau
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        0.15 0.8 2.45 6.5 16.2 41.5 100.        ! space-separated list of requested coordinates 
+requested_bounds: 0.0  0.3  0.3  1.3  1.3  3.6  3.6  9.4 9.4 23.0 23.0 60.0 60.0 100000. ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Air Pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Incident Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             % 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap500
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         omega (=dp/dt)
+comment:           at 500 hPa level; commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p500
+out_name:          wap500
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta700
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+comment:           at 700 hPa level
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p700
+out_name:          ta700
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pcct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pcct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Precipitation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upward Latent Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cltisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Total Total Cloud Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    albisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_albedo
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Mean Cloud Albedo
+comment:           When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          albisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pctisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_cloud_top
+units:             Pa 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Mean Cloud Top Pressure
+comment:           When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pctisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    parsolRefl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_bidirectional_reflectance
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         PARASOL Reflectance
+comment:           Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude sza5 time
+out_name:          parsolRefl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cltcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Total Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cllcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Low Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cllcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clmcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Mid Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clmcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clhcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO High Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clhcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud Area Fraction in Atmosphere Layer
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Calculate as the mass of  cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Ice
+comment:           Calculate as the mass of cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_convective_mass_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          mc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    clcalipso 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Cloud Fraction
+comment:           40 levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 time
+out_name:          clcalipso 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Cloud Area Fraction
+comment:           7 levels x 7 tau
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude tau plev7 time
+out_name:          clisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Pressure on Model Levels
+comment:           This field is needed only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Pressure on Model Half-Levels
+comment:           This field is needed only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_cfMon b/Tables/CMIP5_cfMon
new file mode 100644
index 0000000..e97f7e4
--- /dev/null
+++ b/Tables/CMIP5_cfMon
@@ -0,0 +1,2550 @@
+table_id: Table cfMon
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plev7
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested_bounds: 100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.  0. ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: p220
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            22000.            ! of scalar (singleton) dimension 
+bounds_values:    0. 44000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p560
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            56000.            ! of scalar (singleton) dimension 
+bounds_values:    44000. 68000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p840
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            84000.            ! of scalar (singleton) dimension 
+bounds_values:    680. 100000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: alt40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         alt40
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760. 17 [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: tau
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    atmosphere_optical_thickness_due_to_cloud
+units:            1
+long_name:        cloud optical thickness
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         tau
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        0.15 0.8 2.45 6.5 16.2 41.5 100.        ! space-separated list of requested coordinates 
+requested_bounds: 0.0  0.3  0.3  1.3  1.3  3.6  3.6  9.4 9.4 23.0 23.0 60.0 60.0 100000. ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: sza5
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    solar_zenith_angle
+units:            degree
+long_name:        solar zenith angle
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         sza
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        0. 20. 40. 60. 80.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+!
+!============
+variable_entry: ps
+!============
+modeling_realm:  atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  surface_air_pressure
+units:         Pa
+cell_methods:     time: mean
+long_name:          Surface Air Pressure
+comment:      not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+out_name:  ps
+type:      real
+!
+
+!============
+variable_entry:    rlu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Longwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rlu
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Shortwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsu
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rld
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Longwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rld
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsd
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Shortwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsd
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlucs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Clear-Sky Longwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rlucs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsucs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Clear-Sky Shortwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsucs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Clear-Sky Longwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rldcs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Clear-Sky Shortwave Radiation
+comment:           Include also the fluxes at the surface and TOA.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsdcs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature
+units:             K s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnta 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_advection
+units:             K s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Air Temperature due to Advection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnta 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntmp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_model_physics
+units:             K s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Air Temperature due to Diabatic Processes
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tntmp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntscpbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing
+units:             K s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Air Temperature Due to Stratiform Cloud and Precipitation and Boundary Layer Mixing
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tntscpbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntr 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_radiative_heating
+units:             K s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Air Temperature due to Radiative Heating
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tntr 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_convection
+units:             K s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Air Temperature due to Moist Convection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tntc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnhus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusa
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_advection
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Specific Humidity due to Advection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnhusa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_convection
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Specific Humidity due to Convection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnhusc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusd
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_diffusion
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Specific Humidity due to Diffusion
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnhusd
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusscpbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Specific Humidity due to Stratiform Cloud Condensation and Evaporation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnhusscpbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusmp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_model_physics
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Specific Humidity due to Model Physics
+comment:           This should include sources and sinks from parametrized physics (e.g. convection, stratiform condensation/evaporation, etc.) and should exclude sources and sinks from resolved dynamics and diffusion.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnhusmp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    eviscu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_momentum_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eddy Viscosity Coefficients for Momentum
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          eviscu
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evisct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_heat_diffusivity
+units:             m2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eddy Diffusivity Coefficients for Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          evisct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Cloud Area Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     clwc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_convective_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Convective Cloud Liquid Water 
+comment:           Calculate as the mass of convective cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:           clwc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clic
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_convective_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Convective Cloud Ice
+comment:           Calculate as the mass of convective cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     stratiform_cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Stratiform Cloud Area Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cls
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clws
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_stratiform_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Stratiform Cloud Liquid Water
+comment:           Calculate as the mass of stratiform cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clws
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clis
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_stratiform_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Stratiform Cloud Ice
+comment:           Calculate as the mass of stratiform cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clis
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mcu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_updraft_convective_mass_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Updraft Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).   Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          mcu
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    mcd
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_downdraft_convective_mass_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downdraft Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          mcd
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    smc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_shallow_convective_mass_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Shallow Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).   The net mass flux should represent the difference between the updraft and downdraft components.  For models with a distinct shallow convection scheme, calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          smc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    dmc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_deep_convective_mass_flux
+units:             kg m-2 s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Deep Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.   Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          dmc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwce 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_condensation_and_evaporation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Condensation and Evaporation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwce 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwcd 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_convective_detrainment
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water Due to Convective Detrainment
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwcd 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwhon 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_homogeneous_nucleation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Homogeneous Nucleation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwhon 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwhen 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_heterogeneous_nucleation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Heterogeneous Nucleation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwhen 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwri 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_riming
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Riming
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwri 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwar 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_accretion_to_rain
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Accretion to Rain
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwar 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwas 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_accretion_to_snow
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Accretion to Snow
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwas 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwmi 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_melting_from_cloud_ice
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Melting From Cloud Ice
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwmi 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwac 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_autoconversion
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Autoconversion
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwac 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclwa 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_advection
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Advection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclwa 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclicd
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_convective_detrainment
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice Due Convective Detrainment
+comment:           Tendency of Mass Fraction of Stratiform Cloud Ice Due to Convective Detrainment
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclicd
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclihon
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_homogeneous_nucleation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Homogeneous Nucleation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclihon
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclihencl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_heterogeneous_nucleation_from_cloud_liquid_water
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Heterogeneous Nucleation From Cloud Liquid
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclihencl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclihenv
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_heterogeneous_nucleation_from_water_vapor
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Heterogeneous Nucleation From Water Vapor
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclihenv
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnscliricl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_riming_from_cloud_liquid_water
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Riming From Cloud Liquid
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnscliricl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclirir
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_riming_from_rain
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Riming From Rain
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclirir
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclids
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_deposition_and_sublimation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Deposition and Sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclids
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnscliag
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_aggregation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Aggregation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnscliag
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclias
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_accretion_to_snow
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Accretion to Snow
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclias
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnscliemi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_evaporation_of_melting_ice
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Evaporation of Melting Ice
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnscliemi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclimr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_melting_to_rain
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Melting to Rain
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclimr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclimcl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_melting_to_cloud_liquid_water
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Melting to Cloud Liquid
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclimcl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnscliif
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_icefall
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Icefall
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnscliif
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsclia
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_advection
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Ice due to Advection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsclia
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsccwce
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_condensation_and_evaporation
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Condensation and Evaporation
+comment:           condensed water includes both liquid and ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsccwce
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsccwacr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_autoconversion_to_rain
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Autoconversion to Rain
+comment:           condensed water includes both liquid and ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsccwacr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsccwacs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_autoconversion_to_snow
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Autoconversion to Snow
+comment:           condensed water includes both liquid and ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsccwacs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsccwif
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_icefall
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Icefall
+comment:           condensed water includes both liquid and ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsccwif
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnsccwa
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_advection
+units:             s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Advection
+comment:           condensed water includes both liquid and ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          tnsccwa
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Shortwave Radiation in 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Longwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlu4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Longwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rlu4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsu4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Shortwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsu4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rld4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Longwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rld4co2
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsd4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Shortwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsd4co2
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlucs4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Clear-Sky Longwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rlucs4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsucs4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Upwelling Clear-Sky Shortwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsucs4co2
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldcs4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Clear-Sky Longwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rldcs4co2
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdcs4co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Downwelling Clear-Sky Shortwave Radiation 4XCO2 Atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          rsdcs4co2
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    cltisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Total Cloud Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    albisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_albedo
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Mean Cloud Albedo
+comment:           When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          albisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ctpisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_cloud_top
+units:             Pa 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Mean Cloud Top Pressure
+comment:           When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ctpisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clisccp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     isccp_cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         ISCCP Cloud Area Fraction
+comment:            7 levels x 7 tau
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev7, tau, time
+out_name:          clisccp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cltcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Total Cloud Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cllcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Low Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p840
+out_name:          cllcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clmcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Mid Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p560
+out_name:          clmcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clhcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO High Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p220
+out_name:          clhcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Cloud Fraction 
+comment:            40 height levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 time
+out_name:          clcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    parasolRefl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_bidirectional_reflectance
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         PARASOL Reflectance 
+comment:            5 bins of solar zenith angle.  This is reflectance as seen at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude sza5 time
+out_name:          parasolRefl
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_cfOff b/Tables/CMIP5_cfOff
new file mode 100644
index 0000000..43feba9
--- /dev/null
+++ b/Tables/CMIP5_cfOff
@@ -0,0 +1,506 @@
+table_id: Table cfOff
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: p220
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            22000.            ! of scalar (singleton) dimension 
+bounds_values:    0. 44000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p560
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            56000.            ! of scalar (singleton) dimension 
+bounds_values:    44000. 68000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: p840
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+type:             double
+value:            84000.            ! of scalar (singleton) dimension 
+bounds_values:    680. 100000.    ! of scalar (singleton) dimension bounds
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alt40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         alt40
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760. 17 [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: scatratio
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    backscattering_ratio
+units:            1
+long_name:        lidar backscattering ratio
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         scatratio
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested_bounds: 0.01 1.2 3 5 7 10 15 20 25 30 40 50 60 80 999 1009 ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: dbze
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    equivalent_reflectivity_factor
+units:            dBZ
+long_name:        CloudSat simulator equivalent radar reflectivity factor
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         dbze
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        -47.5 -42.5 -37.5 -32.5 -27.5 -22.5 -17.5 -12.5 -7.5 -2.5 2.5 7.5 12.5 17.5 22.5        ! space-separated list of requested coordinates 
+requested_bounds: -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 ! space-separated list of requested coordinate bounds
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: sza5
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    solar_zenith_angle
+units:            degree
+long_name:        solar zenith angle
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         sza
+stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+requested:        0. 20. 40. 60. 80.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+variable_entry:      clcalipso 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Cloud Fraction
+comment:           (40 height levels)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 time
+out_name:            clcalipso 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clcalipso2  
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Cloud Fraction Undetected by CloudSat
+comment:           (40 height levels)  Clouds detected by CALIPSO but below the detectability threshold of CloudSat
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 time
+out_name:          clcalipso2  
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:     cfadDbze94
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     histogram_of_equivalent_reflectivity_factor_over_height_above_reference_ellipsoid
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CloudSat Radar Reflectivity
+comment:           CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 dbze time
+out_name:           cfadDbze94
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cfadLidarsr532
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     histogram_of_backscattering_ratio_over_height_above_reference_ellipsoid
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Scattering Ratio
+comment:           CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alt40 scatratio time
+out_name:          cfadLidarsr532
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    parasolRefl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_bidirectional_reflectance
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         PARASOL Reflectance
+comment:           Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude sza5 time
+out_name:          parasolRefl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cltcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Total Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cltcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cllcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Low Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p840
+out_name:          cllcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clmcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO Mid Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p560
+out_name:          clmcalipso
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clhcalipso
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         CALIPSO High Level Cloud Fraction 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time p220
+out_name:          clhcalipso
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_cfSites b/Tables/CMIP5_cfSites
new file mode 100644
index 0000000..82d1e68
--- /dev/null
+++ b/Tables/CMIP5_cfSites
@@ -0,0 +1,2106 @@
+table_id: Table cfSites
+modeling_realm: atmos
+
+frequency: subhr
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: time1
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: site
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+units:            1
+long_name:        site index
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         site
+type:             integer
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacello volume: volcello
+long_name:         Near-Surface Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1 height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ts
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: point
+cell_measures:      area: areacello volume: volcello
+long_name:         Surface Temperature
+comment:           ""skin"" temperature (i.e., SST for open ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          ts
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: point
+long_name:         Sea Level Pressure
+comment:           not, in general, the same as surface pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: point
+long_name:         Surface Air Pressure
+comment:           not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: point
+long_name:         Eastward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1 height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: point
+long_name:         Northward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) northward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1 height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: point
+long_name:         Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1 height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hurs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: point
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1 height2m
+out_name:          hurs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: point
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meters) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1 height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Snowfall Flux
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Evaporation
+comment:           at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          evspsbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tauu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_eastward_stress
+units:             Pa
+cell_methods:      time: point
+long_name:         Surface Downward Eastward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          tauu
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauv
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_northward_stress
+units:             Pa
+cell_methods:      time: point
+long_name:         Surface Downward Northward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          tauv
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Incident Shortwave Radiation
+comment:           incident shortwave at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Shortwave Radiation
+comment:           at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere (to be compared with satellite measurements)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    prw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_water_vapor_content
+units:             kg m-2
+cell_methods:      time: point
+long_name:         Water Vapor Path
+comment:           vertically integrated through the atmospheric column
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          prw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: point
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2
+cell_methods:      time: point
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2
+cell_methods:      time: point
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rtmt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_downward_radiative_flux_at_top_of_atmosphere_model
+units:             W m-2
+cell_methods:      time: point
+long_name:         Net Downward Flux at Top of Model
+comment:           i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          rtmt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: point
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          ccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: point
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          cct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ci 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: point
+long_name:         Fraction of Time Convection Occurs
+comment:           Fraction of time that convection occurs in the grid cell .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          ci 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sci
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: point
+long_name:         Fraction of Time Shallow Convection Occurs
+comment:           Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          sci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2antt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg  m-2 s-1
+cell_methods:      time: point
+long_name:         Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          fco2antt
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2fos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          fco2fos
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2nat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources
+comment:           Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e., ""net ecosystem biospheric productivity"", for land, and ""ai [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        site time1
+out_name:          fco2nat
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: point
+long_name:         Cloud Area Fraction
+comment:           Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: point
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Include both large-scale and convective cloud.  Calculate as the mass of  cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: point
+long_name:         Mass Fraction of Cloud Ice
+comment:           Include both large-scale and convective cloud. Calculate as the mass of  cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_convective_mass_flux
+units:             kg m-2 s-1
+cell_methods:      time: point
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the updrafts).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevhalf site time1
+out_name:          mc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: point
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: point
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: point
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: point
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: point
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: point
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: point
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rlu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rlu
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rsu
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rld
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rld
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsd
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: point
+long_name:         Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rsd
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlucs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Upwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rlucs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsucs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rsucs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rldcs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: point
+long_name:         Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          rsdcs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tnt 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature
+units:             K s-1
+cell_methods:      time: point
+long_name:         Tendency of Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnt 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnta 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_advection
+units:             K s-1
+cell_methods:      time: point
+long_name:         Tendency of Air Temperature due to Advection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnta 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntmp
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_model_physics
+units:             K s-1
+cell_methods:      time: point
+long_name:         Tendency of Air Temperature due to Diabatic Processes
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tntmp
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntscpbl 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing
+units:             K s-1
+cell_methods:      time: point
+long_name:         Tendency of Air Temperature due to Stratiform Cloud Condensation and Evaporation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tntscpbl 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntr 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_radiative_heating
+units:             K s-1
+cell_methods:      time: point
+long_name:         Tendency of Air Temperature due to Radiative Heating
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tntr 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tntc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_air_temperature_due_to_convection
+units:             K s-1
+cell_methods:      time: point
+long_name:         Tendency of Air Temperature due to Moist Convection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tntc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity
+units:             s-1
+cell_methods:      time: point
+long_name:         Tendency of Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnhus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusa 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_advection
+units:             s-1
+cell_methods:      time: point
+long_name:         Tendency of Specific Humidity due to Advection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnhusa 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusc 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_convection
+units:             s-1
+cell_methods:      time: point
+long_name:         Tendency of Specific Humidity due to Convection
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnhusc 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusd 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_diffusion
+units:             s-1
+cell_methods:      time: point
+long_name:         Tendency of Specific Humidity due to Diffusion
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnhusd 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusscpbl 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing
+units:             s-1
+cell_methods:      time: point
+long_name:         Tendency of Specific Humidity due to Stratiform Cloud Condensation and Evaporation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnhusscpbl 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tnhusmp 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     tendency_of_specific_humidity_due_to_model_physics
+units:             s-1
+cell_methods:      time: point
+long_name:         Tendency of Specific Humidity due to Model Physics
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          tnhusmp 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_momentum_diffusivity
+units:             m2 s-1
+cell_methods:      time: point
+long_name:         Eddy Viscosity Coefficient for Momentum Variables
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          evu
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    edt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_heat_diffusivity
+units:             m2 s-1
+cell_methods:      time: point
+long_name:         Eddy Diffusivity Coefficient for Temperature Variable
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        alevel site time1
+out_name:          edt
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_da b/Tables/CMIP5_da
new file mode 100644
index 0000000..5d4fc50
--- /dev/null
+++ b/Tables/CMIP5_da
@@ -0,0 +1,1143 @@
+table_id: Table da
+modeling_realm: atmos
+
+frequency: da
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   11 March 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time ! space separated required global attribute 
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plev8
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        100000. 85000. 70000. 50000. 25000. 10000. 5000. 1000.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meter) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: minimum
+long_name:         Daily Minimum Near-Surface Air Temperature
+comment:           daily-minimum near-surface (usually, 2 meter) air temperature.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: maximum
+long_name:         Daily Maximum Near-Surface Air Temperature
+comment:           daily-maximum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Near-Surface Air Temperature
+comment:           daily-mean near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: mean
+long_name:         Sea Level Pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Daily-Mean Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tossq
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     square_of_sea_surface_temperature
+units:             K2
+cell_methods:      time:mean
+long_name:         Square of Sea Surface Temperature
+comment:           square of temperature of liquid ocean, averaged over the day. Report on the ocean grid.  This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tossq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tos
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Sea Surface Temperature
+comment:           temperature of liquid ocean. Report on the ocean grid.  This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    omldamax
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mixed_layer_thickness_defined_by_mixing_scheme
+units:             m 
+cell_methods:      time: maximum
+long_name:         Daily Maximum Ocean Mixed Layer Thickness De_ned by Mixing Scheme 
+comment:           This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          omldamax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrsos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     moisture_content_of_soil_layer
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Moisture in Upper 0.1 m of Soil Column
+comment:           Compute the mass of water in all phases in the upper 0.1 meters of soil.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrsos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2 meter) relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          rhs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhsmin
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: minimum
+long_name:         Surface Daily Minimum Relative Humidity
+comment:           near-surface (usually, 2 meter) minimum  relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          rhsmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhsmax
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: maximum
+long_name:         Surface Daily Maximum Relative Humidity
+comment:           near-surface (usually, 2 meter) maximum  relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          rhsmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snc
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Snow Area Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tslsi
+!============
+modeling_realm:    land
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+long_name:          Surface Temperature Where Land or Sea Ice
+comment:           """skin"" temperature of all surfaces except open ocean.  "
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tslsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snw
+!============
+modeling_realm:    land
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_amount
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+long_name:         Surface Snow Amount
+comment:           Compute as the mass of surface snow on the land portion of the grid cell divided by the land area in the grid cell; report 0.0 where the land fraction is 0; exclude snow on vegetation canopy or on sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Solid Precipitation
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrro
+!============
+modeling_realm:    land
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     runoff_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land 
+long_name:         Total Runoff
+comment:           "compute as the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell divided by the land area in the grid cell."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrro
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Wind
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Wind
+comment:           near-surface (usually, 10 meters) northward component of wind.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWindmax
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: maximum
+long_name:         Daily Maximum Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWindmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    tsosq
+!============
+modeling_realm:    ocean
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             K2
+cell_methods:      time: mean
+long_name:         Mean Square of Sea Surface Temperature
+comment:           Report on ocean's grid.  This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tsosq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    usi
+!============
+modeling_realm:    seaIce ocean
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_sea_ice_velocity
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Sea Ice Velocity
+comment:           "Report on ocean's grid.  Report as ""missing"" in regions free of sea ice."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          usi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsi
+!============
+modeling_realm:    seaIce ocean
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_sea_ice_velocity
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Sea Ice Velocity
+comment:           "Report on ocean's grid.  Report as ""missing"" in regions free of sea ice."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sic
+!============
+modeling_realm:    seaIce ocean
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_ice_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Sea Ice Area Fraction
+comment:           fraction of grid cell covered by sea ice. Report on ocean's grid. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sit
+!============
+modeling_realm:    seaIce ocean
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_ice_thickness
+units:             m
+cell_methods:      time: mean area: mean where sea 
+long_name:         Sea Ice Thickness
+comment:           Report on ocean's grid.  Compute the mean thickness of sea ice in the ocean portion of the grid cell (averaging over the entire ocean portion, including the ice-free fraction).  Report as 0.0 in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sit
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1 
+cell_methods:      time: mean
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1 
+cell_methods:      time: mean
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_day b/Tables/CMIP5_day
new file mode 100644
index 0000000..d595421
--- /dev/null
+++ b/Tables/CMIP5_day
@@ -0,0 +1,1137 @@
+table_id: Table day
+modeling_realm: atmos
+
+frequency: day
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plev8
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        100000. 85000. 70000. 50000. 25000. 10000. 5000. 1000.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meter) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: minimum
+cell_measures:      area: areacella
+long_name:         Daily Minimum Near-Surface Air Temperature
+comment:           daily-minimum near-surface (usually, 2 meter) air temperature.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: maximum
+cell_measures:      area: areacella
+long_name:         Daily Maximum Near-Surface Air Temperature
+comment:           daily-maximum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Near-Surface Air Temperature
+comment:           daily-mean near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Sea Level Pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Daily-Mean Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tossq
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     square_of_sea_surface_temperature
+units:             K2
+cell_methods:      time:mean
+cell_measures:      area: areacella
+long_name:         Square of Sea Surface Temperature
+comment:           square of temperature of liquid ocean, averaged over the day. Report on the ocean grid.  This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tossq
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tos
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Sea Surface Temperature
+comment:           temperature of liquid ocean. Report on the ocean grid.  This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    omldamax
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     ocean_mixed_layer_thickness_defined_by_mixing_scheme
+units:             m 
+cell_methods:      time: maximum
+cell_measures:      area: areacella
+long_name:         Daily Maximum Ocean Mixed Layer Thickness De_ned by Mixing Scheme 
+comment:           This variable appears in WGOMD Table 2.2 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          omldamax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrsos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     moisture_content_of_soil_layer
+units:             kg m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Moisture in Upper 0.1 m of Soil Column
+comment:           Compute the mass of water in all phases in the upper 0.1 meters of soil.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrsos
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2 meter) relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          rhs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhsmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: minimum
+cell_measures:      area: areacella
+long_name:         Surface Daily Minimum Relative Humidity
+comment:           near-surface (usually, 2 meter) minimum  relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          rhsmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rhsmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: maximum
+cell_measures:      area: areacella
+long_name:         Surface Daily Maximum Relative Humidity
+comment:           near-surface (usually, 2 meter) maximum  relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          rhsmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Snow Area Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tslsi
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:          Surface Temperature Where Land or Sea Ice
+comment:           """skin"" temperature of all surfaces except open ocean.  "
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tslsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    snw
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_snow_amount
+units:             kg m-2
+cell_methods:      time: mean area: mean where land
+cell_measures:      area: areacella
+long_name:         Surface Snow Amount
+comment:           Compute as the mass of surface snow on the land portion of the grid cell divided by the land area in the grid cell; report 0.0 where the land fraction is 0; exclude snow on vegetation canopy or on sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          snw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Solid Precipitation
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mrro
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     runoff_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean area: mean where land 
+cell_measures:      area: areacella
+long_name:         Total Runoff
+comment:           "compute as the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell divided by the land area in the grid cell."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          mrro
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Wind
+comment:           near-surface (usually, 10 meters) northward component of wind.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWindmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: maximum
+cell_measures:      area: areacella
+long_name:         Daily Maximum Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWindmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upward Latent Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    usi
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_sea_ice_velocity
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Sea Ice Velocity
+comment:           "Report on ocean's grid.  Report as ""missing"" in regions free of sea ice."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          usi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vsi
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_sea_ice_velocity
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Sea Ice Velocity
+comment:           "Report on ocean's grid.  Report as ""missing"" in regions free of sea ice."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          vsi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sic
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_ice_area_fraction
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Sea Ice Area Fraction
+comment:           fraction of grid cell covered by sea ice. Report on ocean's grid. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sic
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sit
+!============
+modeling_realm:    seaIce ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_ice_thickness
+units:             m
+cell_methods:      time: mean area: mean where sea 
+cell_measures:      area: areacella
+long_name:         Sea Ice Thickness
+comment:           Report on ocean's grid.  Compute the mean thickness of sea ice in the ocean portion of the grid cell (averaging over the entire ocean portion, including the ice-free fraction).  Report as 0.0 in regions free of sea ice.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sit
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1 
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plev8 time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_fx b/Tables/CMIP5_fx
new file mode 100644
index 0000000..4515181
--- /dev/null
+++ b/Tables/CMIP5_fx
@@ -0,0 +1,776 @@
+table_id: Table fx
+modeling_realm: atmos
+
+frequency: fx
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   29 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact institute_id ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  0.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: depth_coord
+!============
+!
+!  This vertical coordinate is used in z-coordinate models 
+!   The units are meters (m), and it has a value of 0. at the surface
+!   and becomes more and more negative with depth.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:	      up
+long_name:        ocean depth coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -12000.
+valid_max:        0.
+!----------------------------------	
+!
+!============
+axis_entry: ocean_double_sigma
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_double_sigma
+axis:             Z
+positive:	  up
+long_name:        ocean double sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= k_c:\n z(k,j,i)= sigma(k)*f(j,i) \n for k > k_c:\n z(k,j,i)= f(j,i) + (sigma(k)-1)*(depth(j,i)-f(j,i)) \n f(j,i)= 0.5*(z1+ z2) + 0.5*(z1-z2)* tanh(2*a/(z1-z2)*(depth(j,i)-href))
+z_factors:        sigma: sigma depth: depth z1: z1 z2: z2 a: a_coeff href: href k_c: k_c
+z_bounds_factors: sigma: sigma_bnds depth: depth z1: z1 z2: z2 a: a href: href k_c: k_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma_z
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_z
+axis:             Z
+long_name:        ocean sigma over z coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= nsigma: z(n,k,j,i) = eta(n,j,i) + sigma(k)*(min(depth_c,depth(j,i))+eta(n,j,i)) ; for k > nsigma: z(n,k,j,i) = zlev(k)
+z_factors:        sigma: sigma eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev
+z_bounds_factors: sigma: sigma_bnds eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: ocean_s
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of s(k), which appears in the formula below, should be stored as ocean_s.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_s.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_s_coordinate
+axis:             Z
+positive:	  up
+long_name:        ocean s-coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i)*(1+s(k)) + depth_c*s(k) + (depth(j,i)-depth_c)*C(k) \n where \n C(k)=(1-b)*sinh(a*s(k))/sinh(a) +\n           b*(tanh(a*(s(k)+0.5))/(2*tanh(0.5*a)) - 0.5)
+z_factors:        s: lev eta: eta depth: depth a: a_coeff b: b_coeff depth_c: depth_c
+z_bounds_factors: s: lev_bnds eta: eta depth: depth a: a b: b depth_c: depth_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of sigma(k), which appears in the formula below, should be stored as ocean_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_coordinate
+axis:             Z
+positive:	      up
+long_name:        ocean sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i) + sigma(k)*(depth(j,i)+eta(n,j,i))
+z_factors:        sigma: lev eta: eta depth: depth
+z_bounds_factors: sigma: lev_bnds eta: eta depth: depth
+!----------------------------------	
+!
+!
+! ***************************************************************
+!
+! Vertical coordinate formula_terms:
+!
+! ***************************************************************
+!
+!============
+variable_entry: eta
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:            m
+cell_methods:     time: mean
+long_name:        Sea Surface Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+type:      real
+!----------------------------------
+!
+!
+!============
+variable_entry: depth
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:        m
+long_name:    Sea Floor Depth
+comment:      Ocean bathymetry.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude
+out_name:  depth
+type:      real
+valid_min:        0
+valid_max:        10000
+ok_min_mean_abs:  2000
+ok_max_mean_abs:  5000
+!----------------------------------
+!
+!
+!============
+variable_entry: sigma
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: depth_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: depth_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: a
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient a
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: b
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient b
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: nsigma
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: nsigma
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+!============
+variable_entry: z1
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z1
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: z2
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z2
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: href
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: href
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: k_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: k_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+
+!============
+variable_entry:    areacella
+!============
+modeling_realm:    atmos land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cell_area
+units:             m2
+long_name:         Atmosphere Grid-Cell Area
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          areacella
+type:              real
+valid_min:         500
+valid_max:         2.50E+05
+!----------------------------------
+!
+
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+cell_measures:      area: areacella
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+
+!============
+variable_entry:    sftlf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     land_area_fraction
+units:             %
+cell_measures:      area: areacella
+long_name:         Land Area Fraction
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          sftlf
+type:              real
+valid_min:         0
+valid_max:         100
+!----------------------------------
+!
+
+!============
+variable_entry:    sftgif
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     land_ice_area_fraction
+units:             %
+cell_measures:      area: areacella
+long_name:         Fraction of Grid Cell Covered with Glacier
+comment:           fraction of grid cell occupied by ""permanent"" ice (i.e., glaciers).  If time varying, report annual values for each year of simulation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          sftgif
+type:              real
+valid_min:         0
+valid_max:         100
+!----------------------------------
+!
+
+!============
+variable_entry:    mrsofc
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     soil_moisture_content_at_field_capacity
+units:             kg m-2
+cell_measures:      area: areacella
+long_name:         Capacity of Soil to Store Water
+comment:           """where land"": divide the total water holding capacity of all the soil in the grid cell by the land area in the grid cell;  report as ""missing"" where the land fraction is 0."
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          mrsofc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rootd
+!============
+modeling_realm:    land
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     root_depth
+units:             m
+cell_measures:      area: areacella
+long_name:         Maximum Root Depth
+comment:           report the maximum soil depth reachable by plant roots (if defined in model), i.e., the maximum soil depth from which they can extract moisture; report as ""missing"" where the land fraction is 0.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          rootd
+type:              real
+valid_min:         0
+valid_max:         30
+!----------------------------------
+!
+
+!============
+variable_entry:    deptho
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_floor_depth_below_geoid
+units:             m
+cell_measures:      area: areacello
+long_name:         Sea Floor Depth
+comment:           Ocean bathymetry.   Report here the sea floor depth for present day.  Report as missing for land grid cells.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          deptho
+type:              real
+valid_min:         0
+valid_max:         10000
+ok_min_mean_abs:   2000
+ok_max_mean_abs:   5000
+!----------------------------------
+!
+
+!============
+variable_entry:    areacello
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cell_area
+units:             m2
+long_name:         Ocean Grid-Cell Area
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          areacello
+type:              real
+valid_min:         10
+valid_max:         2.50E+05
+!----------------------------------
+!
+
+!============
+variable_entry:    sftof
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     sea_area_fraction
+units:             %
+cell_measures:      area: areacello
+long_name:         Sea Area Fraction
+comment:           Report on the same grid that ocean fields are reported (i.e., the ocean native grid, or the grid that ocean data has been provided to CMIP.  For completeness, provide this even if the ocean grid is the same as the atmospheric grid. This is the area fraction at the ocean surface.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          sftof
+type:              real
+valid_min:         0
+valid_max:         100
+!----------------------------------
+!
+
+!============
+variable_entry:    basin
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     region
+units:             1
+cell_measures:      area: areacello
+long_name:         Region Selection Index
+comment:           Report on the same grid as the temperature field.  flag_values=0,1,2,3,4,5,6,7,8,9,10 corresponding to flag_meanings=global_land, southern_ocean, atlantic_ocean, pacific_ocean, arctic_ocean, indian_ocean, mediterranean_sea, black_sea, hudson_bay, baltic_sea, red_sea.  Report on the grid used for the temperature field.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          basin
+type:              integer
+valid_min:         1
+valid_max:         10
+!----------------------------------
+!
+
+!============
+variable_entry:    basinv
+!============
+modeling_realm:    ocean
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     region
+units:             1
+long_name:         Region Selection Index
+comment:           Report on the same grid as the ocean flag_values=0,1,2,3,4,5,6,7,8,9,10 corresponding to flag_meanings=global_land, southern_ocean, atlantic_ocean, pacific_ocean, arctic_ocean, indian_ocean, mediterranean_sea, black_sea, hudson_bay, baltic_sea, red_sea.   Report on the grid used for the meridional overturning stream function.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          basinv
+type:              integer
+valid_min:         1
+valid_max:         10
+!----------------------------------
+!
+
diff --git a/Tables/CMIP5_grids b/Tables/CMIP5_grids
new file mode 100644
index 0000000..45cff99
--- /dev/null
+++ b/Tables/CMIP5_grids
@@ -0,0 +1,294 @@
+table_id: Table grids
+
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5       ! project id
+table_date:   12 March 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time ! space separated required global attribute 
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+!
+!
+!============
+mapping_entry: sample_user_mapping
+!============
+parameter: false_easting
+parameter: false_northing
+coordinates: rlon rlat
+!
+!============
+axis_entry: i_index
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------
+out_name:         i
+units:            1
+long_name:        cell index along first dimension
+!----------------------------------	
+!
+!
+!============
+axis_entry: j_index
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------
+out_name:         j
+units:            1
+long_name:        cell index along second dimension
+!----------------------------------	
+!
+!
+!============
+axis_entry: k_index
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------
+out_name:         k
+units:            1
+long_name:        cell index along third dimension
+!----------------------------------	
+!
+!============
+axis_entry: l_index
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------
+out_name:         l
+units:            1
+long_name:        cell index along fourth dimension
+!----------------------------------	
+!
+!============
+axis_entry: m_index
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------
+out_name:         m
+units:            1
+long_name:        cell index along fifth dimension
+!----------------------------------	
+!
+!============
+axis_entry: x
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    projection_x_coordinate
+units:            m
+long_name:        x coordinate of projection
+axis: X
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!
+!============
+axis_entry: y
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    projection_y_coordinate
+units:            m
+long_name:        y coordinate of projection
+axis: Y
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!
+!============
+axis_entry: grid_latitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    grid_latitude
+units:            degrees
+long_name:        latitude in rotated pole grid
+axis: Y
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         rlat
+!
+!============
+axis_entry: grid_longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    grid_longitude
+units:            degrees
+long_name:        longitude in rotated pole grid
+axis: X
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         rlon
+!
+!============
+axis_entry: vertices
+!============
+!
+!------------
+!
+!============
+variable_entry: longitude
+!============
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+long_name:        longitude coordinate
+dimensions:	  longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!============
+variable_entry: latitude
+!============
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+long_name:        latitude coordinate
+dimensions:	  longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.        
+valid_max:        90.
+!----------------------------------	
+!
+!
+!============
+variable_entry: vertices_longitude
+!============
+!----------------------------------	
+units:            degrees_east
+dimensions:	  vertices longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon_vertices
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!============
+variable_entry: vertices_latitude
+!============
+!----------------------------------	
+units:            degrees_north
+dimensions:	  vertices longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat_vertices
+valid_min:        -90.        
+valid_max:        90.
+!----------------------------------	
+!
+!
diff --git a/Tables/md5s b/Tables/md5s
new file mode 100644
index 0000000..ed0029f
--- /dev/null
+++ b/Tables/md5s
@@ -0,0 +1 @@
+{'CMIP5': {'cf3hr': {'12 March 2010': 'ae9a82f01824d9012aa0657cd7896a9a', '26 April 2010': 'b0d0de6ac8d5ef997347610ea6a51d6d', '29 April 2010': 'fdc4fb38dd4cfb7f066329ed43a9e805', '02 April 2010': '3394448440a54597570cc877dcbaca7d', '22 March 2010': '712cd14ab6a28116da828ff555e00c4d'}, '3hr': {'12 March 2010': '8249007b0a473d19554b47efaff87a39', '26 April 2010': 'dfae3d259acdbe58fd8b4e3f535f02f1', '29 April 2010': '7ca1dc5009cca6779717dd557e5edc27', '02 April 2010': '1e9df4873834764950e7 [...]
\ No newline at end of file
diff --git a/Tables_csv/3hr.csv b/Tables_csv/3hr.csv
new file mode 100644
index 0000000..15649c7
--- /dev/null
+++ b/Tables_csv/3hr.csv
@@ -0,0 +1,37 @@
+CMOR Table 3hr: 2-D Atmospheric and Surface Fields Sampled Every 3 Hours,,,,,3hr,3hr,,,,,,,,,,,,,,,,
+"All fields are saved on the atmospheric grid.  Precipitation, clouds, and all flux variables are averaged over 3-hour intervals (0-3Z, 3-6Z, 6-9Z, 9-12Z, 12-15Z, 15-18Z, 18-21Z, 21-24Z).  All other fields are sampled synoptically at 0Z, 3Z, 6Z, 9Z, 12Z, 15Z, 18Z, and 21Z.",,,,,,,,,,,,,,,,,,,,,,
+The 3-hourly data should be collected only for the following experiments and years:,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,experiment,time-period requested,,,,,,,,,,,,,,,,,,
+,,,decadal hindcasts/forecasts,all years,,,,,,,,,,,,,,,,,,
+,,,historical,Jan 1960 - Dec 2005,,,,,,,,,,,,,,,,,,
+,,,AMIP,all years,,,,,,,,,,,,,,,,,,
+,,,future simulations driven by RCP concentrations or emissions,"Jan 2026 - Dec 2045, Jan 2081-Dec 2100, 2181-2200, and 2281-2300",,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases.  This is the 3-hour mean precipitation flux.,,pr,precipitation_flux,,kg m-2 s-1,time:mean,,,,,,real,longitude latitude time,pr,atmos,,area: areacella,,
+1,Air Temperature,K,"near-surface (usually, 2 meter) air temperature, sampled synoptically.",,tas,air_temperature,,K,time: point,,,,,,real,longitude latitude time1 height2m,tas,atmos,,area: areacella,,
+1,Surface Upward Latent Heat Flux,W m-2,This is the 3-hour mean flux.,,hfls,surface_upward_latent_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfls,atmos,,area: areacella,,
+1,Surface Upward Sensible Heat Flux,W m-2,This is the 3-hour mean flux.,,hfss,surface_upward_sensible_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfss,atmos,,area: areacella,,
+1,Surface Downwelling Longwave Radiation,W m-2,This is the 3-hour mean flux.,,rlds,surface_downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rlds,atmos,,area: areacella,,
+1,Surface Upwelling Longwave Radiation,W m-2,This is the 3-hour mean flux.,,rlus,surface_upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlus,atmos,,area: areacella,,
+1,Surface Downwelling Shortwave Radiation,W m-2,This is the 3-hour mean flux.,,rsds,surface_downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsds,atmos,,area: areacella,,
+1,Surface Upwelling Shortwave Radiation,W m-2,This is the 3-hour mean flux.,,rsus,surface_upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsus,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,atmos,,area: areacella,,
+1,Eastward Near-Surface Wind Speed,m s-1,sampled synoptically.,,uas,eastward_wind,,m s-1,time: point,,,,,,real,longitude latitude time1 height2m,uas,atmos,,area: areacella,,
+1,Northward Near-Surface Wind Speed,m s-1,sampled synoptically.,,vas,northward_wind,,m s-1,time: point,,,,,,real,longitude latitude time1 height2m,vas,atmos,,area: areacella,,
+1,Near-Surface Specific Humidity,1,"near-surface (usually 2 m) specific humidity, sampled synoptically.",,huss,specific_humidity,,1,time: point,,,,,,real,longitude latitude time1 height2m,huss,atmos,,area: areacella,,
+1,Moisture in Upper 0.1 m of Soil Column,kg m-2,Compute the mass of water in all phases in the upper 0.1 meters of soil.,,mrsos,moisture_content_of_soil_layer,,kg m-2,time: point,,,,,,real,longitude latitude time1,mrsos,land,,area: areacella,,
+1, Surface Temperature Where Land or Sea Ice,K,"""skin"" temperature of all surfaces except open ocean, sampled synoptically.  ",,tslsi,surface_temperature,,K,time: point,,,,,,real,longitude latitude time1,tslsi,land,,area: areacella,,
+1,Sea Surface Temperature,K,"temperature of surface of open ocean, sampled synoptically.",,tso,sea_surface_temperature,,K,time: point area: mean where sea,,,,,,real,longitude latitude time1,tso,ocean,,area: areacella,,
+1,Convective Precipitation,kg m-2 s-1,at surface.  This is a 3-hour mean convective precipitation flux.,,prc,convective_precipitation_flux,,kg m-2 s-1,time:mean,,,,,,real,longitude latitude time,prc,atmos,,area: areacella,,
+1,Snowfall Flux,kg m-2 s-1,at surface.  Includes all forms of precipitating solid phase of water.  This is the 3-hour mean snowfall flux.,,prsn,snowfall_flux,,kg m-2 s-1,time:mean,,,,,,real,longitude latitude time,prsn,atmos,,area: areacella,,
+1,Total Runoff,kg m-2 s-1,"compute the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell divided by the land area in the grid cell, averaged over the 3-hour interval.",,mrro,runoff_flux,,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,mrro,land,,area: areacella,,
+1,Surface Downwelling Clear-Sky Longwave Radiation,W m-2,This is a 3-hour mean flux.,,rldscs,downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rldscs,atmos,,area: areacella,,
+1,Surface Downwelling Clear-Sky Shortwave Radiation,W m-2,This is a 3-hour mean flux.,,rsdscs,surface_downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdscs,atmos,,area: areacella,,
+1,Surface Upwelling Clear-Sky Shortwave Radiation,W m-2,This is a 3-hour mean flux.,,rluscs,surface_upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rluscs,atmos,,area: areacella,,
+1,Surface Pressure,Pa,"sampled synoptically to diagnose atmospheric tides, this is better than mean sea level pressure.",,ps,surface_air_pressure,,Pa,time: point,,,,,,real,longitude latitude time1,ps,atmos,,area: areacella,,
+1,Total Cloud Fraction,%,"for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.  This is a 3-hour mean.",,clt,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,clt,atmos,,area: areacella,,
+1,Surface Downward Diffuse Shortwave Radiation,W m-2,This is a 3-hour mean flux.,,rsdsdiff,,surface_diffuse_downwelling_shortwave_radiative_flux_in_air,W m-2,time: mean,,,,,,real,longitude latitude time,rsdsdiff,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/6hrLev.csv b/Tables_csv/6hrLev.csv
new file mode 100644
index 0000000..b94ee8d
--- /dev/null
+++ b/Tables_csv/6hrLev.csv
@@ -0,0 +1,17 @@
+CMOR Table 6hrLev: Fields (Sampled Every 6 Hours) for Driving Regional Models,,,,,6hrLev,6hr,,,,,,,,,,,,,,,,
+"The 6-hourly data on model levels should be sampled as ""snapshots"" (not as 6-hour means) at 0Z, 6Z, 12Z, and 18Z and should be collected only for the following experiments and years:",,,,,,,,,,,,,,,,,,,,,,
+,,,experiment,reporting time-period ,ensemble size,priority,,,,,,,,,,,,,,,,
+,,,historical,Jan 1950 - Dec 2005,1,highest,,,,,,,,,,,,,,,,
+,,,AMIP,all years,1,highest,,,,,,,,,,,,,,,,
+,,,RCP4.5 and RCP8.5,Jan 2006 - Dec 2100,1 for each expt.,highest,,,,,,,,,,,,,,,,
+,,,decadal hindcasts/forecasts runs inititalized in late 2005 and late 1980,late 2005 - Dec 2035 and       late 1980 - Dec 2010,3 for each period,lower,,,,,,,,,,,,,,,,
+,,,decadal hindcasts/forecasts runs inititalized in late 1990,late 1990 - Dec 2000,3,lower,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Air Temperature,K,on all model levels,,ta,air_temperature,,K,,,,,,,real,longitude latitude alevel time1,ta,atmos,,area: areacella,,
+1,Eastward Wind,m s-1,on all model levels,,ua,eastward_wind,,m s-1,,,,,,,real,longitude latitude alevel time1,ua,atmos,,area: areacella,,
+1,Northward Wind,m s-1,on all model levels,,va,northward_wind,,m s-1,,,,,,,real,longitude latitude alevel time1,va,atmos,,area: areacella,,
+1,Specific Humidity,1,on all model levels,,hus,specific_humidity,,1,,,,,,,real,longitude latitude alevel time1,hus,atmos,,area: areacella,,
+1,Surface Air Pressure,Pa,"surface pressure, not mean sea level pressure",,ps,surface_air_pressure,,Pa,,,,,,,real,longitude latitude time1,ps,atmos,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/6hrPlev.csv b/Tables_csv/6hrPlev.csv
new file mode 100644
index 0000000..ff47fe2
--- /dev/null
+++ b/Tables_csv/6hrPlev.csv
@@ -0,0 +1,17 @@
+CMOR Table 6hrPlev: Fields (Sampled Every 6 Hours) for Storm-Track Analysis and other Advanced Diagnostic Applications,,,,,6hrPlev,6hr,,,,,,,,,,,,,,,,
+"The 6-hourly data on pressure levels should be sampled as ""snapshots"" (not as 6-hour means) at 0Z, 6Z, 12Z, and 18Z and should be collected only for the following experiments and years.",,,,,,,,,,,,,,,,,,,,,,
+,,,experiment,time-period requested,,,,,,,,,,,,,,,,,,
+,,,decadal hindcasts/forecasts,all years,,,,,,,,,,,,,,,,,,
+,,,historical,Jan 1950 - Dec 2005,,,,,,,,,,,,,,,,,,
+,,,AMIP,all years,,,,,,,,,,,,,,,,,,
+,,,RCP4.5 and RCP8.5,Jan 2006 - Dec 2100,,,,,,,,,,,,,,,,,,
+,,,preindustrial control ,30 years -- preferably corresponding to years 1979-2008 of the historical run,,,,,,,,,,,,,,,,,,
+,,,Last glacial maximum paleo-run,last 30 years,,,,,,,,,,,,,,,,,,
+,,,mid-Holocene paleo- run,last 30 years,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Eastward Wind,m s-1,"on the following pressure levels: 850, 500, 250 hPa",,ua,eastward_wind,,m s-1,,,,,,,real,longitude latitude plev3 time1,ua,atmos,,area: areacella,,
+1,Northward Wind,m s-1,"on the following pressure levels: 850, 500, 250 hPa",,va,northward_wind,,m s-1,,,,,,,real,longitude latitude plev3 time1,va,atmos,,area: areacella,,
+1,Air Temperature,K,"on the following pressure levels: 850, 500, 250 hPa",,ta,air_temperature,,K,,,,,,,real,longitude latitude plev3 time1,ta,atmos,,area: areacella,,
+1,Sea Level Pressure,Pa,,,psl,air_pressure_at_sea_level,,Pa,,,,,,,real,longitude latitude time1,psl,atmos,,area: areacella,,
+,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/add_dims.txt b/Tables_csv/add_dims.txt
new file mode 100644
index 0000000..5575e12
--- /dev/null
+++ b/Tables_csv/add_dims.txt
@@ -0,0 +1,378 @@
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+!
+!============
+variable_entry: ps
+!============
+modeling_realm:  atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  surface_air_pressure
+units:         Pa
+cell_methods:     time: mean
+long_name:          Surface Air Pressure
+comment:      not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+out_name:  ps
+type:      real
+!
diff --git a/Tables_csv/add_dims2.txt b/Tables_csv/add_dims2.txt
new file mode 100644
index 0000000..7807216
--- /dev/null
+++ b/Tables_csv/add_dims2.txt
@@ -0,0 +1,384 @@
+!============
+axis_entry: depth_coord
+!============
+!
+!  This vertical coordinate is used in z-coordinate models 
+!   The units are meters (m), and it has a value of 0. at the surface
+!   and becomes more and more negative with depth.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:	      up
+long_name:        ocean depth coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -12000.
+valid_max:        0.
+!----------------------------------	
+!
+!============
+axis_entry: ocean_double_sigma
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_double_sigma
+axis:             Z
+positive:	  up
+long_name:        ocean double sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= k_c:\n z(k,j,i)= sigma(k)*f(j,i) \n for k > k_c:\n z(k,j,i)= f(j,i) + (sigma(k)-1)*(depth(j,i)-f(j,i)) \n f(j,i)= 0.5*(z1+ z2) + 0.5*(z1-z2)* tanh(2*a/(z1-z2)*(depth(j,i)-href))
+z_factors:        sigma: sigma depth: depth z1: z1 z2: z2 a: a_coeff href: href k_c: k_c
+z_bounds_factors: sigma: sigma_bnds depth: depth z1: z1 z2: z2 a: a href: href k_c: k_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma_z
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_z
+axis:             Z
+long_name:        ocean sigma over z coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+formula:          for k <= nsigma: z(n,k,j,i) = eta(n,j,i) + sigma(k)*(min(depth_c,depth(j,i))+eta(n,j,i)) ; for k > nsigma: z(n,k,j,i) = zlev(k)
+z_factors:        sigma: sigma eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev
+z_bounds_factors: sigma: sigma_bnds eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: ocean_s
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of s(k), which appears in the formula below, should be stored as ocean_s.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_s.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_s_coordinate
+axis:             Z
+positive:	  up
+long_name:        ocean s-coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i)*(1+s(k)) + depth_c*s(k) + (depth(j,i)-depth_c)*C(k) \n where \n C(k)=(1-b)*sinh(a*s(k))/sinh(a) +\n           b*(tanh(a*(s(k)+0.5))/(2*tanh(0.5*a)) - 0.5)
+z_factors:        s: lev eta: eta depth: depth a: a_coeff b: b_coeff depth_c: depth_c
+z_bounds_factors: s: lev_bnds eta: eta depth: depth a: a b: b depth_c: depth_c
+!----------------------------------	
+!
+!============
+axis_entry: ocean_sigma
+!============
+!
+!  This coordinate is dimensionless and varies from 0 at the surface to -1. at the ocean floor.
+!  The values of sigma(k), which appears in the formula below, should be stored as ocean_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not ocean_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    ocean_sigma_coordinate
+axis:             Z
+positive:	      up
+long_name:        ocean sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        0.
+formula:          z(n,k,j,i) = eta(n,j,i) + sigma(k)*(depth(j,i)+eta(n,j,i))
+z_factors:        sigma: lev eta: eta depth: depth
+z_bounds_factors: sigma: lev_bnds eta: eta depth: depth
+!----------------------------------	
+!
+!
+! ***************************************************************
+!
+! Vertical coordinate formula_terms:
+!
+! ***************************************************************
+!
+!============
+variable_entry: eta
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:            m
+cell_methods:     time: mean
+long_name:        Sea Surface Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude time
+type:      real
+!----------------------------------
+!
+!
+!============
+variable_entry: depth
+!============
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:        m
+long_name:    Sea Floor Depth
+comment:      Ocean bathymetry.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      longitude latitude
+out_name:  depth
+type:      real
+valid_min:        0
+valid_max:        10000
+ok_min_mean_abs:  2000
+ok_max_mean_abs:  5000
+!----------------------------------
+!
+!
+!============
+variable_entry: sigma
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: sigma(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: zlev_bnds
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: zlev(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         olevel
+type:               double
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: depth_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: depth_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: a
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient a
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: b
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: coefficient b
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: nsigma
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: nsigma
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
+!============
+variable_entry: z1
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z1
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: z2
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: z2
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: href
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: href
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: k_c
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: k_c
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+type:               integer
+!----------------------------------
+!
+!
diff --git a/Tables_csv/aero.csv b/Tables_csv/aero.csv
new file mode 100644
index 0000000..2128878
--- /dev/null
+++ b/Tables_csv/aero.csv
@@ -0,0 +1,102 @@
+CMOR Table aero: Monthly Mean Aerosol-Related Fields,,,,,aero,mon,,,,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+In CMOR Table aero: 2-D fields on atmospheric grid,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+,Aerosol Optics,,,,,,,,,,,,,,,,,,,,,
+1,Ambient Aerosol Opitical Thickness at 550 nm,1,"atmosphere_optical_thickness_due_to_ambient_aerosol: AOD from the ambient aerosls (i.e., includes aerosol water).  Does not include AOD from stratospheric aerosols if these are prescribed but includes other possible background aerosol types.",,od550aer,atmosphere_optical_thickness_due_to_ambient_aerosol,,1,time: mean,,,,,,real,longitude latitude time,od550aer,aerosol,,area: areacella,,
+1,Ambient Fine Aerosol Opitical Thickness at 550 nm,1,"atmosphere_optical_thickness_due_to_pm1_ambient_aerosol: od550 due to particles with wet diameter less than 1 um  (""ambient"" means ""wetted""). When models do not include explicit size information, it can be assumed that all anthropogenic aerosols and natural secondary aerosols have diameter less than 1 um. ",,od550lt1aer,atmosphere_optical_thickness_due_to_pm1_ambient_aerosol,,1,time: mean,,,,,,real,longitude latitude time,od550lt [...]
+1,Ambient Aerosol Absorption Optical Thickness at 550 nm,1,,,abs550aer,atmosphere_absorption_optical_thickness_due_to_ambient_aerosol,,1,time: mean,,,,,,real,longitude latitude time,abs550aer,aerosol,,area: areacella,,
+2,Ambient Aerosol Opitical Thickness at 870 nm,1,"atmosphere_optical_thickness_due_to_ambient_aerosol: AOD from the ambient aerosls (i.e., includes aerosol water).  Does not include AOD from stratospheric aerosols if these are prescribed but includes other possible background aerosol types.",,od870aer,atmosphere_optical_thickness_due_to_ambient_aerosol,,1,time: mean,,,,,,real,longitude latitude time,od870aer,aerosol,,area: areacella,,
+,Aerosol Budgets,,,,,,,,,,,,,,,,,,,,,
+1,Rate of Emission and Production of Dry Aerosol Total Organic Matter,kg m-2 s-1,"tendency of atmosphere mass content of organic matter dry aerosol due to net production and emission.  This is the sum of total emission of POA and total production of SOA (see next two entries), and it should only be reported if POA and SOA cannot be separately reported. ""Mass"" refers to the mass of organic matter, not mass of organic carbon alone. ",,emioa,tendency_of_atmosphere_mass_content_of_particul [...]
+1,Emission Rate of Dry Aerosol Primary Organic Matter,kg m-2 s-1,"tendency of atmosphere mass content of primary organic aerosol due to emission:  ""mass"" refers to the mass of primary organic matter, not mass of organic carbon alone.","In a previous message you said production referred to SOA, not POA, so I've removed ""production"" here and only use ""emission"".  Is this o.k.?",emipoa,,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emipoa,aerosol,,area: areacella,,
+1,Production Rate of Dry Aerosol Secondary Organic Matter,kg m-2 s-1,"tendency of atmosphere mass content of secondary organic matter_dry aerosol due to net production:  If model lumps SOA emissions with POA, then report the sum of POA and SOA emissions as POA emissions.  ""mass"" refers to the mass of primary organic matter, not mass of organic carbon alone.",,chepsoa,tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_due_to_net_chemical_production,, [...]
+1,Emission Rate of Black Carbon Aerosol Mass,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_emission,,emibc,tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emibc,aerosol,,area: areacella,,
+3,Dry Deposition Rate of Dry Aerosol Organic Matter,kg m-2 s-1,"tendency_of_atmosphere_mass_content_of_organic_dry_aerosol_due_to_dry_deposition: This is the sum of dry deposition of POA and dry deposition of SOA (see next two entries), and it should only be reported if POA and SOA cannot be separately reported. ""Mass"" refers to the mass of organic matter, not mass of organic carbon alone. ",,dryoa,tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_due_to_dry [...]
+3,Dry Deposition Rate of Dry Aerosol Primary Organic Matter,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_primary_organic_matter_dry_aerosol_due_to_dry_deposition,,drypoa,tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drypoa,aerosol,,area: areacella,,
+3,Dry Deposition Rate of Dry Aerosol Secondary Organic Matter,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_secondary_organic_dry_aerosol_due_to_dry_deposition,,drysoa,tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drysoa,aerosol,,area: areacella,,
+3,Dry Deposition Rate of Black Carbon Aerosol Mass,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_dry_deposition,,drybc,tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drybc,aerosol,,area: areacella,,
+3,Wet Deposition Rate of Dry Aerosol Organic Matter,kg m-2 s-1,"tendency_of_atmosphere_mass_content_of_organic_matter_dry_aerosols_due_to_wet_deposition: This is the sum of wet deposition of POA and wet deposition of SOA (see next two entries), and it should only be reported if POA and SOA cannot be separately reported. ""Mass"" refers to the mass of organic matter, not mass of organic carbon alone. ",,wetoa,tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_du [...]
+3,Wet Deposition Rate of Dry Aerosol Primary Organic Matter,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_primary_organic_matter_dry_aerosols_due_to_wet_deposition,,wetpoa,tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetpoa,aerosol,,area: areacella,,
+3,Wet Deposition Rate of Dry Aerosol Secondary Organic Matter,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_secondary_organic_dry_aerosol_due_to_wet_deposition,,wetsoa,tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetsoa,aerosol,,area: areacella,,
+3,Wet Deposition Rate of Black Carbon Aerosol Mass,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_wet_deposition,,wetbc,tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetbc,aerosol,,area: areacella,,
+1,Total Emission of Primary Aerosol from Biomass Burning,kg m-2 s-1,"tendency of atmosphere mass content of primary organic matter dry aerosol due to emission: This does not include sources of secondary aerosols from biomass burning aerosols, such as SO2 or SOA. ",,emibb,tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emibb,aerosol,,area: areacella,,
+1,Total Emission Rate of SO2,kg m-2 s-1,"tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_emission: mass refers to SO2, not S.",,emiso2,tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emiso2,aerosol,,area: areacella,,
+1,Total Direct Emission Rate of SO4,kg m-2 s-1,"tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_due_to_net_production_and_emission: mass refers to SO4, not S",,emiso4,,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emiso4,aerosol,,area: areacella,,
+1,Total Emission Rate of DMS,kg m-2 s-1,"tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_emission: mass refers to DMS, not S",,emidms,tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emidms,aerosol,,area: areacella,,
+3,Dry Deposition Rate of SO2,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_dry_deposition,,dryso2,tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,dryso2,aerosol,,area: areacella,,
+1,Dry Deposition Rate of SO4,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_sulfate_due_to_dry_deposition,,dryso4,tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,dryso4,aerosol,,area: areacella,,
+3,Dry Deposition Rate of DMS,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_dry_deposition: omit if DMS is not dry deposited in the model.,,drydms,tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drydms,aerosol,,area: areacella,,
+1,Wet Deposition Rate of SO4,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_sulfate_expressed_as_sulfur_dry_aerosol_due_to_wet_deposition,,wetso4,tendency_of_atmosphere_mass_content_of_sulfate_expressed_as_sulfur_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetso4,aerosol,,area: areacella,,
+3,Wet Deposition Rate of SO2,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_wet_deposition,,wetso2,tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetso2,aerosol,,area: areacella,,
+3,Wet Deposition Rate of DMS,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_wet_deposition: omit if DMS is not wet deposited in the model.,,wetdms,tendency_of_atmosphere_mass_content_of_dimethyl_sulfide_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetdms,aerosol,,area: areacella,,
+1,Total Emission Rate of NH3,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_ammonia_due_to_emission,,eminh3,tendency_of_atmosphere_mass_content_of_ammonia_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,eminh3,aerosol,,area: areacella,,
+3,Dry Deposition Rate of NH3,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_ammonia_due_to_dry_deposition,,drynh3,tendency_of_atmosphere_mass_content_of_ammonia_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drynh3,aerosol,,area: areacella,,
+1,Dry Deposition Rate of NH4,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_ammonium_due_to_dry_deposition,,drynh4,tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drynh4,aerosol,,area: areacella,,
+1,Wet Deposition Rate of NH4+NH3,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_ammonium_due_to_wet_deposition,,wetnh4,tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetnh4,aerosol,,area: areacella,,
+1,Total Emission Rate of Seasalt,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_emission,,emiss,tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emiss,aerosol,,area: areacella,,
+3,Dry Deposition Rate of Seasalt,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_dry_deposition,,dryss,tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,dryss,aerosol,,area: areacella,,
+3,Wet Deposition Rate of Seasalt,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_wet_deposition,,wetss,tendency_of_atmosphere_mass_content_of_seasalt_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetss,aerosol,,area: areacella,,
+1,Total Emission Rate of Dust,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_emission,,emidust,tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_emission,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,emidust,aerosol,,area: areacella,,
+1,Dry Deposition Rate of Dust,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_dry_deposition,,drydust,tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_dry_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,drydust,aerosol,,area: areacella,,
+1,Wet Deposition Rate of Dust,kg m-2 s-1,tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_wet_deposition,,wetdust,tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_due_to_wet_deposition,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,wetdust,aerosol,,area: areacella,,
+,Aerosol Loads,,,,,,,,,,,,,,,,,,,,,
+1,Load of Dry Aerosol Organic Matter,kg m-2,"atmosphere dry organic content: This is the vertically integrated sum of atmosphere_primary_organic_content and atmosphere_secondary_organic_content (see next two table entries), and therefore should only be reported if those two components cannot be separately reported. ",,loadoa,atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadoa,aerosol,,area: areacella,,
+1,Load of Dry Aerosol Primary Organic Matter,kg m-2,atmosphere_primary_organic_content,,loadpoa,atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadpoa,aerosol,,area: areacella,,
+1,Load of Dry Aerosol Secondary Organic Matter,kg m-2,atmosphere_secondary_organic_content,,loadsoa,atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadsoa,aerosol,,area: areacella,,
+1,Load of Black Carbon Aerosol,kg m-2,atmosphere_black_carbon_content,,loadbc,atmosphere_mass_content_of_black_carbon_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadbc,aerosol,,area: areacella,,
+1,Load of SO4,kg m-2,atmosphere_sulfate_content,"Is this ""dry"" or ""ambient""?",loadso4,atmosphere_mass_content_of_sulfate_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadso4,aerosol,,area: areacella,,
+1,Load of Dust,kg m-2,atmosphere_dust_content,,loaddust,atmosphere_mass_content_of_dust_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loaddust,aerosol,,area: areacella,,
+1,Load of Seasalt,kg m-2,atmosphere_seasalt_content,,loadss,atmosphere_mass_content_of_seasalt_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadss,aerosol,,area: areacella,,
+1,Load of NO3,kg m-2,atmosphere_nitrate_content,,loadno3,atmosphere_mass_content_of_nitrate_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadno3,aerosol,,area: areacella,,
+3,Load of NH4,kg m-2,atmosphere_ammonium_content,,loadnh4,atmosphere_mass_content_of_ammonium_dry_aerosol,,kg m-2,time: mean,,,,,,real,longitude latitude time,loadnh4,aerosol,,area: areacella,,
+,Surface Concentrations,,,,,,,,,,,,,,,,,,,,,
+3,Surface Concentration of Dry Aerosol Organic Matter,kg m-3,"mass_concentration_of_organic_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  This is the sum of concentrations of primary and secondary organic aerosol (see next two table entries), and therefore should only be reported if those two components cannot be separately reported.",,sconcoa,mass_concentration_of_particulate_organic_matter_dry_aerosol_in_ [...]
+3,Surface Concentration of Dry Aerosol Primary Organic Matter,kg m-3,mass_concentration_of_primary_organic_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcpoa,mass_concentration_of_primary_particulate_organic_matter_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcpoa,aerosol,,area: areacella,,
+3,Surface Concentration of Dry Aerosol Secondary Organic Matter,kg m-3,"mass_concentration_of_secondary_organic_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  If the model lumps SOA with POA, then report their sum as POA.",,sconcsoa,mass_concentration_of_secondary_particulate_organic_matter_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcsoa,aerosol,,area: areacella,,
+3,Surface Concentration of Black Carbon Aerosol,kg m-3,mass_concentration_of_black_carbon_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcbc,mass_concentration_of_black_carbon_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcbc,aerosol,,area: areacella,,
+3,Surface Concentration of SO4,kg m-3,mass_concentration_of_sulfate_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcso4,mass_concentration_of_sulfate_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcso4,aerosol,,area: areacella,,
+3,Surface Concentration of Dust,kg m-3,mass_concentration_of_dust_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcdust,mass_concentration_of_dust_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcdust,aerosol,,area: areacella,,
+3,Surface Concentration of Seasalt,kg m-3,mass_concentration_of_seasalt_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcss,mass_concentration_of_seasalt_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcss,aerosol,,area: areacella,,
+3,Surface Concentration of NO3,kg m-3,mass_concentration_of_nitrate_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcno3,mass_concentration_of_nitrate_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcno3,aerosol,,area: areacella,,
+3,Surface Concentration of NH4,kg m-3,mass_concentration_of_ammonium_aerosol_in_air: In model lowest layer (The location of the model's lowest layer should be recorded in the netCDF output file).  ,,sconcnh4,mass_concentration_of_ammonium_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,real,"longitude latitude alev1, time",sconcnh4,aerosol,,area: areacella,,
+,Clouds and Radiation,,,,,,,,,,,,,,,,,,,,,
+2,Surface Diffuse Downward Shortwave Radiation,W m-2,downwelling_diffuse_shortwave_flux_in_air,,rsdsdiff,,downwelling_diffuse_shortwave_flux_in_air,W m-2,time: mean,,,,,,real,longitude latitude time,rsdsdiff,aerosol land,,area: areacella,,
+2,Surface Diffuse Downward Clear Sky Shortwave Radiation,W m-2,downwelling_diffuse_shortwave_flux_in_air_assuming_clear_sky,,rsdscsdiff,,downwelling_diffuse_shortwave_flux_in_air_assuming_clear_sky,W m-2,time: mean,,,,,,real,longitude latitude time,rsdscsdiff,aerosol land,,area: areacella,,
+1,Cloud-Top Effective Droplet Radius,m,"Droplets are liquid only.  Report effective radiaus ""as seen from space"" over liquid cloudy portion of grid cell.  This is the value from uppermost model layer with liquid cloud or, if available, it is better to sum over all liquid cloud tops, no matter where they occur, as long as they are seen from the top of the atmosphere. Weight by total liquid cloud top fraction of  (as seen from TOA) each time sample when computing monthly mean.",,reffclwt [...]
+1,Cloud Droplet Number Concentration of Cloud Tops,m-3,"Droplets are liquid only.  Report concentration ""as seen from space"" over liquid cloudy portion of grid cell.  This is the value from uppermost model layer with liquid cloud or, if available, it is better to sum over all liquid cloud tops, no matter where they occur, as long as they are seen from the top of the atmosphere. Weight by total liquid cloud top fraction of  (as seen from TOA) each time sample when computing monthly mean [...]
+1,Ice Crystal Number Concentration of Cloud Tops,m-3,"Report concentration ""as seen from space"" over liquid cloudy portion of grid cell.  This is the value from uppermost model layer with ice cloud or, if available, it is better to sum over all ice cloud tops, no matter where they occur, as long as they are seen from the top of the atmosphere. Weight by total ice cloud top fraction (as seen from TOA) of each time sample when computing monthly mean.",,cldnci,,ice_crystal_number_concentr [...]
+1,Column Integrated Cloud Droplet Number,m-2,Droplets are liquid only.  Weight by liquid cloud fraction in each layer when vertically integrating.  Weight by total liquid cloud fraction (as seen from TOA) when reporting monthly mean,,cldnvi,atmosphere_number_content_of_cloud_droplets,,m-2,time: mean,,,,,,real,longitude latitude time,cldnvi,aerosol,,area: areacella,,
+In CMOR Table aero: 3-D aerosol-related concentrations and properties on model levels,,,,,,,,,,,,,,,,,,,,,,
+"1-year samples: 1850 to 1950 every 20 years, 1960 to 2020 every 10 years, 2040 to 2100 every 20 years",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Ambient Aerosol Extinction Optical Thickness at 550 nm,m-1,"atmosphere_extinction_due_to_ambient_aerosol: ""ambient"" means ""wetted"".  This and other fields in this table are 3-D.",,ec550aer,,atmosphere_extinction_due_to_ambient_aerosol,m-1,time: mean,,,,,,,longitude latitude alevel time,ec550aer,aerosol,,area: areacella,,
+1,Concentration of Dry Aerosol Organic Matter,kg m-3,"mass_concentration_of_organic_matter_dry_aerosol_in_air mass concentration of organic matter dry aerosol in air:  This is the sum of concentrations of primary and secondary organic aerosols (see next two table entries), and therefore should only be reported if those two components cannot be separately reported. ",,concoa,mass_concentration_of_particulate_organic_matter_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude ale [...]
+1,Concentration of Dry Aerosol Primary Organic Matter,kg m-3,mass_concentration_of_primary_organic_matter_dry_aerosol_in_air,,concpoa,mass_concentration_of_primary_particulate_organic_matter_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concpoa,aerosol,,area: areacella,,
+1,Concentration of Dry Aerosol Secondary Organic Matter,kg m-3,"mass_concentration_of_secondary_organic_matter_dry_aerosol_in_air: If the model lumps SOA with POA, then report their sum as POA.",,concsoa,mass_concentration_of_secondary_particulate_organic_matter_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concsoa,aerosol,,area: areacella,,
+1,Concentration of Biomass Burning Aerosol,kg m-3,mass_concentration_of_biomass_burning_dry_aerosol_in_air,,concbb,,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concbb,aerosol,,area: areacella,,
+1,Concentration of Black Carbon Aerosol,kg m-3,mass_concentration_ of_black_carbon_dry_aerosol_in_air,,concbc,mass_concentration_of_black_carbon_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concbc,aerosol,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Concentration of Aerosol Water ,kg m-3,"mass_concentration_of_water_in_ambient_aerosol_in_air: ""ambient"" means ""wetted""",,concaerh2o,mass_concentration_of_water_in_ambient_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concaerh2o,aerosol,,area: areacella,,
+1,Concentration of SO4,kg m-3,mass_concentration_of_sulfate_dry_aerosol_in_air,,concso4,mass_concentration_of_sulfate_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concso4,aerosol,,area: areacella,,
+1,Mole Fraction of SO2,1,mole_fraction_of_sulfur_dioxide_in_air,,concso2,mole_fraction_of_sulfur_dioxide_in_air,,1,time: mean,,,,,,,longitude latitude alevel time,concso2,aerosol,,area: areacella,,
+1,Mole Fraction of DMS,1,mole_concentration_of_dimethyl_sulfide_in_air,,concdms,mole_fraction_of_dimethyl_sulfide_in_air,,1,time: mean,,,,,,,longitude latitude alevel time,concdms,aerosol,,area: areacella,,
+1,Concentration of NO3 Aerosol,kg m-3,mass_concentration_ of_nitrate_dry_aerosol_in_air,,concno3,mass_concentration_of_nitrate_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concno3,aerosol,,area: areacella,,
+1,Concentration of NH4 ,kg m-3,mass_concentration_of_ammonium_dry_aerosol_in_air,,concnh4,mass_concentration_of_ammonium_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concnh4,aerosol,,area: areacella,,
+1,Concentration of Seasalt ,kg m-3,mass_concentration_ of_seasalt_dry_aerosol_in_air,,concss,mass_concentration_of_seasalt_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concss,aerosol,,area: areacella,,
+1,Concentration of Dust ,kg m-3,mass_concentration_ of_dust_dry_aerosol_in_air,,concdust,mass_concentration_of_dust_dry_aerosol_in_air,,kg m-3,time: mean,,,,,,,longitude latitude alevel time,concdust,aerosol,,area: areacella,,
+2,Aerosol Number Concentration,m-3,number_concentration_of_ambient_aerosol_in_air,,conccn,,number_concentration_of_ambient_aerosol_in_air,m-3,time: mean,,,,,,,longitude latitude alevel time,conccn,aerosol,,area: areacella,,
+3,Number Concentration of Nucleation Mode Aerosol,m-3,number_concentration_of_ambient_aerosol_in_nucleation_mode_in_air: include all particles with diameter smaller than 3 nm,,concnmcn,,number_concentration_of_ambient_aerosol_in_nucleation_mode_in_air,m-3,time: mean,,,,,,,longitude latitude alevel time,concnmcn,aerosol,,area: areacella,,
+2,Number Concentration Coarse Mode Aerosol,m-3,number_concentration_of_ambient_aerosol_in_coarse_mode_in_air: include all particles with diameter larger than 1 micron,,conccmcn,,number_concentration_of_ambient_aerosol_in_coarse_mode_in_air,m-3,time: mean,,,,,,,longitude latitude alevel time,conccmcn,aerosol,,area: areacella,,
+1,Stratiform Cloud Droplet Effective Radius,m,"Droplets are liquid.  The effective radius is defined as the ratio of the third moment over the second moment of the particle size distribution and the time-mean should be calculated, weighting the individual samples by the cloudy fraction of the grid cell.",,reffclws,effective_radius_of_stratiform_cloud_liquid_water_particle,,m,time: mean,,,,,,,longitude latitude alevel time,reffclws,aerosol,,area: areacella,,
+1,Convective Cloud Droplet Effective Radius,m,"Droplets are liquid.  The effective radius is defined as the ratio of the third moment over the second moment of the particle size distribution and the time-mean should be calculated, weighting the individual samples by the cloudy fraction of the grid cell.",,reffclwc,effective_radius_of_convective_cloud_liquid_water_particle,,m,time: mean,,,,,,,longitude latitude alevel time,reffclwc,aerosol,,area: areacella,,
+1,Cloud Droplet Number Concentration,m-3,Cloud droplet number concentration in liquid clouds,Weighted by the cloud liquid fraction.,cdnc,,,m-3,time: mean,,,,,,,longitude latitude alevel time,cdnc,aerosol,,area: areacella,,
+1,Ice Crystal Number Concentration,m-3,Ice Crystal number concentration in ice clouds,Weighted by the ice liquid fraction.,inc,,,m-3,time: mean,,,,,,,longitude latitude alevel time,inc,aerosol,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/amon.csv b/Tables_csv/amon.csv
new file mode 100644
index 0000000..78004ce
--- /dev/null
+++ b/Tables_csv/amon.csv
@@ -0,0 +1,98 @@
+CMOR Table Amon: Monthly Mean Atmospheric Fields and Some Surface Fields,,,,,Amon,mon,,,,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,,,,,
+In CMOR Table Amon: 2-D fields on atmospheric grid,,,,,,,,,,,,,,,,,,,,,,
+CMOR Table Amon: Monthly Mean Atmospheric Fields and Some Surface Fields,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Near-Surface Air Temperature,K,"near-surface (usually, 2 meter) air temperature.",,tas,air_temperature,,K,time: mean,,,,,,real,longitude latitude time height2m,tas,atmos,,area: areacello volume: volcello,,
+1,Surface Temperature,K,"""skin"" temperature (i.e., SST for open ocean)",,ts,surface_temperature,,K,time: mean,,,,,,real,longitude latitude time,ts,atmos,,area: areacello volume: volcello,,
+1,Daily Minimum Near-Surface Air Temperature,K,"monthly mean of the daily-minimum near-surface (usually, 2 meter) air temperature.",,tasmin,air_temperature,,K,time: minimum within days time: mean over days,,,,,,real,longitude latitude time height2m,tasmin,atmos,,,,
+1,Daily Maximum Near-Surface Air Temperature,K,"monthly mean of the daily-maximum near-surface (usually, 2 meter) air temperature.",,tasmax,air_temperature,,K,time: maximum within days time: mean over days,,,,,,real,longitude latitude time height2m,tasmax,atmos,,,,
+1,Sea Level Pressure,Pa,"not, in general, the same as surface pressure",,psl,air_pressure_at_sea_level,,Pa,time: mean,,,,,,real,longitude latitude time,psl,atmos,,,,
+1,Surface Air Pressure,Pa,"not, in general, the same as mean sea-level pressure",,ps,surface_air_pressure,,Pa,time: mean,,,,,,real,longitude latitude time,ps,atmos,,,,
+1,Eastward Near-Surface Wind Speed,m s-1,"near-surface (usually, 10 meters) eastward component of wind.",,uas,eastward_wind,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,uas,atmos,,,,
+1,Northward Near-Surface Wind Speed,m s-1,"near-surface (usually, 10 meters) northward component of wind.",,vas,northward_wind,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,vas,atmos,,,,
+1,Near-Surface Wind Speed,m s-1,"near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind",,sfcWind,wind_speed,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,sfcWind,atmos,,,,
+1,Near-Surface Relative Humidity,%,"near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hurs,relative_humidity,,%,time: mean,,,,,,real,longitude latitude time height2m,hurs,atmos,,,,
+1,Near-Surface Specific Humidity,1,"near-surface (usually, 2 meters) specific humidity.",,huss,specific_humidity,,1,time: mean,,,,,,real,longitude latitude time height2m,huss,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective),,pr,precipitation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,pr,atmos,,,,
+1,Snowfall Flux,kg m-2 s-1,at surface; includes precipitation of all forms of water in the solid phase,,prsn,snowfall_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,prsn,atmos,,,,
+1,Convective Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases.,,prc,convective_precipitation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,prc,atmos,,,,
+1,Evaporation,kg m-2 s-1,at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation),,evspsbl,water_evaporation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,evspsbl,atmos,,,,
+1,Surface Snow and Ice Sublimation Flux,kg m-2 s-1,The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.,,sbl,water_sublimation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,sbl,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Surface Downward Eastward Wind Stress,Pa,,,tauu,surface_downward_eastward_stress,,Pa,time: mean,,,,,down,real,longitude latitude time,tauu,atmos,,,,
+1,Surface Downward Northward Wind Stress,Pa,,,tauv,surface_downward_northward_stress,,Pa,time: mean,,,,,down,real,longitude latitude time,tauv,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Surface Upward Latent Heat Flux,W m-2,includes both evaporation and sublimation,,hfls,surface_upward_latent_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfls,atmos,,,,
+1,Surface Upward Sensible Heat Flux,W m-2,,,hfss,surface_upward_sensible_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfss,atmos,,,,
+1,Surface Downwelling Longwave Radiation,W m-2,,,rlds,surface_downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rlds,atmos,,,,
+1,Surface Upwelling Longwave Radiation,W m-2,,,rlus,surface_upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlus,atmos,,,,
+1,Surface Downwelling Shortwave Radiation,W m-2,,,rsds,surface_downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsds,atmos,,,,
+1,Surface Upwelling Shortwave Radiation,W m-2,,,rsus,surface_upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsus,atmos,,,,
+1,Surface Downwelling Clear-Sky Shortwave Radiation,W m-2,,,rsdscs,surface_downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdscs,atmos,,,,
+1,Surface Upwelling Clear-Sky Shortwave Radiation,W m-2,,,rsuscs,surface_upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsuscs,atmos,,,,
+1,Surface Downwelling Clear-Sky Longwave Radiation,W m-2,,,rldscs,surface_downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rldscs,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,TOA Incident Shortwave Radiation,W m-2,incident shortwave at the top of the atmosphere,,rsdt,toa_incoming_shortwave_flux,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdt,atmos,,,,
+1,TOA Outgoing Shortwave Radiation,W m-2,at the top of the atmosphere,,rsut,toa_outgoing_shortwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsut,atmos,,,,
+1,TOA Outgoing Longwave Radiation,W m-2,at the top of the atmosphere (to be compared with satellite measurements),,rlut,toa_outgoing_longwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlut,atmos,,,,
+1,TOA Outgoing Clear-Sky Longwave Radiation,W m-2,,,rlutcs,toa_outgoing_longwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlutcs,atmos,,,,
+1,TOA Outgoing Clear-Sky Shortwave Radiation,W m-2,,,rsutcs,toa_outgoing_shortwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsutcs,atmos,,,,
+,,,,,,,,,,,,,,,real,,,atmos,,,,
+1,Water Vapor Path,kg m-2,vertically integrated through the atmospheric column,,prw,atmosphere_water_vapor_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,prw,atmos,,,,
+1,Total Cloud Fraction,%,"for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.",,clt,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,clt,atmos,,,,
+1,Condensed Water Path,kg m-2,calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clwvi,atmosphere_cloud_condensed_water_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,clwvi,atmos,,,,
+1,Ice Water Path,kg m-2,calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clivi,atmosphere_cloud_ice_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,clivi,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Net Downward Flux at Top of Model,W m-2,"i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.",,rtmt,net_downward_radiative_flux_at_top_of_atmosphere_model,,W m-2,time: mean,,,,,down,real,longitude latitude time,rtmt,atmos,,,,
+1,Air Pressure at Convective Cloud Base,Pa,,,ccb,air_pressure_at_convective_cloud_base,,Pa,time: mean,,,,,,real,longitude latitude time,ccb,atmos,,,,
+1,Air Pressure at Convective Cloud Top,Pa,,,cct,air_pressure_at_convective_cloud_top,,Pa,time: mean,,,,,,real,longitude latitude time,cct,atmos,,,,
+1,Fraction of Time Convection Occurs,1,Fraction of time that convection occurs in the grid cell .,,ci ,,,1,time: mean,,,,,,real,longitude latitude time,ci ,atmos,,,,
+1,Fraction of Time Shallow Convection Occurs,1,Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only),,sci,,,1,time: mean,,,,,,real,longitude latitude time,sci,atmos,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2,kg  m-2 s-1,"This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.",,fco2antt,,,kg  m-2 s-1,time: mean,,,,,up,real,longitude latitude time,fco2antt,atmos,,,,
+1,Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2,kg m-2 s-1,"This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)",,fco2fos,,,kg m-2 s-1,time: mean,,,,,up,real,longitude latitude time,fco2fos,atmos,,,,
+1,Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources,kg m-2 s-1,"Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e. [...]
+"In CMOR Table Amon: Atmospheric 3-D fields on standard pressure levels, except 4 cloud fields which are on model levels.  ",,,,,,,,,,,,,,,,,,,,,,
+"Include the following mandatory pressure levels (which are available from all available reanalyses and CMIP3): 1000, 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, and 10 hPa;  Also include, when appropriate, output on the following additional pressure levels: 7, 5, 3, 2, 1 and 0.4 hPa.",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Cloud Area Fraction,%,Report on model layers (not standard pressures).  Include both large-scale and convective cloud.,,cl,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alevel time,cl,atmos,,area: areacella,,
+1,Mass Fraction of Cloud Liquid Water,1,Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cells. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clw,mass_fraction_of_cloud_liquid_water_in_air,,1,time: mean,,,,,,real,longitud [...]
+1,Mass Fraction of Cloud Ice,1,Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud ice in the grid cell divided by the mass of air (including the water in all phases) in the grid cell. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,cli,mass_fraction_of_cloud_ice_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time,cli,a [...]
+1,Convective Mass Flux,kg m-2 s-1,"Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  The flux is computed as the mass divided by the area of the grid cell.  ",,mc,atmosphere_net_upward_convective_mass_flux,,kg m-2 s-1,time: mean,,,,,up,real,longitude latitude alevhalf time,mc,atmos,,area: areacella,,
+1,Air Temperature,K,,,ta,air_temperature,,K,time: mean,,,,,,real,longitude latitude plevs time,ta,atmos,,area: areacella,,
+1,Eastward Wind,m s-1,,,ua,eastward_wind,,m s-1,time: mean,,,,,,real,longitude latitude plevs time,ua,atmos,,area: areacella,,
+1,Northward Wind,m s-1,,,va,northward_wind,,m s-1,time: mean,,,,,,real,longitude latitude plevs time,va,atmos,,area: areacella,,
+1,Specific Humidity,1,,,hus,specific_humidity,,1,time: mean,,,,,,real,longitude latitude plevs time,hus,atmos,,area: areacella,,
+1,Relative Humidity,%,"This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hur,relative_humidity,,%,time: mean,,,,,,real,longitude latitude plevs time,hur,atmos,,area: areacella,,
+1,omega (=dp/dt),Pa s-1,"commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)",,wap,lagrangian_tendency_of_air_pressure,,Pa s-1,time: mean,,,,,,real,longitude latitude plevs time,wap,atmos,,area: areacella,,
+1,Geopotential Height,m,,,zg,geopotential_height,,m,time: mean,,,,,,real,longitude latitude plevs time,zg,atmos,,area: areacella,,
+1,Mole Fraction of O3,1e-9,"If this does not change over time (except possibly to vary identically over each annual cycle), report instead the variable described in the next table entry. ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model levels?  Or should we also require either the vertically integrated mole fraction (or mass?) of this species or the vertically integrated globally averaged mole fraction (or mass?)?,tro3,m [...]
+1,Mole Fraction of O3,1e-9,"If O3 does not vary from one year to the next, report 12 months, starting with January.   (Note: include all 12 months even if the values don't vary seasonally.)  When calling CMOR, identify this variable as tro3Clim, not tro3. If the O3 varies from one year to the next,  then report instead the field described in the previous table entry.  ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model leve [...]
+1,Mole Fraction of CO2,1e-6,"For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next one). ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model levels?  Or should we also require ei [...]
+1,Mole Fraction of CO2,1e-6,"Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2Clim, not co2.   If  CO2 is spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next).",Are these the preferred units or should it b [...]
+1,Total Atmospheric Mass of CO2,kg,"For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). ",,co2mass,,,kg,time: mean,,,,,,real,time,co2mass,atmos,,,,
+1,Total Atmospheric Mass of CO2,kg,"Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2massClim, not co2mass.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). ",,co2mass,,,kg,time: mean wi [...]
+1,Mole Fraction of CH4,1e-9,"For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next one). ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model levels?  Or should we also  [...]
+1,Mole Fraction of CH4,1e-9,"Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4global, not ch4.   If  CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next).",Are these the preferred units or should [...]
+1,Global Mean Mole Fraction of CH4,1e-9,"For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially nonuniform, omit this field, but report Mole Fraction of CH4 (see the table entry before the previous one). ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model levels?  Or should  [...]
+1,Global Mean Mole Fraction of CH4,1e-9,"Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If CH4 is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry before the previous one). ",Are th [...]
+1,Mole Fraction of N2O,1e-9,"For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next one). ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model levels?  Or should we also  [...]
+1,Mole Fraction of N2O,1e-9,"Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as n2oglobal, not n2o.   If  N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next).",Are these the preferred units or should [...]
+1,Global Mean Mole Fraction of N2O,1e-9,"For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially nonuniform, omit this field, but report Mole Fraction of N2O (see the table entry before the previous one). ",Are these the preferred units or should it be a unitless fraction?  Should this field be reported instead on model levels?  Or should  [...]
+1,Global Mean Mole Fraction of N2O,1e-9,"Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If N2O is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry before the previous one). ",Are th [...]
+1,Mole Fraction of Other Radiatively Important Trace Gases (That Are Evolving in Time).,,"If assumed spatially uniform, report only time-series of the single value.  For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report values for only 12 months (starting with January.  (Note: include all 12 months even if the values don't vary seasonally.)  ",Please let me know what (if any) other trace gas concentrations should [...]
+
+In CMOR Table Amon: Climatological atmospheric 3-D pressure fields ,,,,,,,,,,,,,,,,,,,,,,
+"These field are requested only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures on each model level are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.  The annual cycle climatology (computed from an appropriate segment of the pre-industrial control run) should be reported on model levels and half levels.  DO NOT REPORT ALL MONTHS FOR AL [...]
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Pressure on Model Levels,Pa,,,pfull,air_pressure,,Pa,time: mean within years time: mean over years,,,,,,real,longitude latitude alevel time2,pfull,atmos,monClim,area: areacella,,
+1,Pressure on Model Half-Levels,Pa,,,phalf,air_pressure,,Pa,time: mean within years time: mean over years,,,,,,real,longitude latitude alevhalf time2,phalf,atmos,monClim,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/amon_2D.csv b/Tables_csv/amon_2D.csv
new file mode 100644
index 0000000..e7bc537
--- /dev/null
+++ b/Tables_csv/amon_2D.csv
@@ -0,0 +1,51 @@
+1,Near-Surface Air Temperature,K,"near-surface (usually, 2 meter) air temperature.",,tas,air_temperature,,K,time: mean,,,,,,real,longitude latitude time height2m,tas,atmos,,area: areacello volume: volcello,,
+1,Surface Temperature,K,"""skin"" temperature (i.e., SST for open ocean)",,ts,surface_temperature,,K,time: mean,,,,,,real,longitude latitude time,ts,atmos,,area: areacello volume: volcello,,
+1,Daily Minimum Near-Surface Air Temperature,K,"monthly mean of the daily-minimum near-surface (usually, 2 meter) air temperature.",,tasmin,air_temperature,,K,time: minimum within days time: mean over days,,,,,,real,longitude latitude time height2m,tasmin,atmos,,,,
+1,Daily Maximum Near-Surface Air Temperature,K,"monthly mean of the daily-maximum near-surface (usually, 2 meter) air temperature.",,tasmax,air_temperature,,K,time: maximum within days time: mean over days,,,,,,real,longitude latitude time height2m,tasmax,atmos,,,,
+1,Sea Level Pressure,Pa,"not, in general, the same as surface pressure",,psl,air_pressure_at_sea_level,,Pa,time: mean,,,,,,real,longitude latitude time,psl,atmos,,,,
+1,Surface Air Pressure,Pa,"not, in general, the same as mean sea-level pressure",,ps,surface_air_pressure,,Pa,time: mean,,,,,,real,longitude latitude time,ps,atmos,,,,
+1,Eastward Near-Surface Wind Speed,m s-1,"near-surface (usually, 10 meters) eastward component of wind.",,uas,eastward_wind,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,uas,atmos,,,,
+1,Northward Near-Surface Wind Speed,m s-1,"near-surface (usually, 10 meters) northward component of wind.",,vas,northward_wind,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,vas,atmos,,,,
+1,Near-Surface Wind Speed,m s-1,"near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind",,sfcWind,wind_speed,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,sfcWind,atmos,,,,
+1,Near-Surface Relative Humidity,%,"near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hurs,relative_humidity,,%,time: mean,,,,,,real,longitude latitude time height2m,hurs,atmos,,,,
+1,Near-Surface Specific Humidity,1,"near-surface (usually, 2 meters) specific humidity.",,huss,specific_humidity,,1,time: mean,,,,,,real,longitude latitude time height2m,huss,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective),,pr,precipitation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,pr,atmos,,,,
+1,Snowfall Flux,kg m-2 s-1,at surface; includes precipitation of all forms of water in the solid phase,,prsn,snowfall_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,prsn,atmos,,,,
+1,Convective Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases.,,prc,convective_precipitation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,prc,atmos,,,,
+1,Evaporation,kg m-2 s-1,at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation),,evspsbl,water_evaporation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,evspsbl,atmos,,,,
+1,Surface Snow and Ice Sublimation Flux,kg m-2 s-1,The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.,,sbl,water_sublimation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,sbl,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Surface Downward Eastward Wind Stress,Pa,,,tauu,surface_downward_eastward_stress,,Pa,time: mean,,,,,down,real,longitude latitude time,tauu,atmos,,,,
+1,Surface Downward Northward Wind Stress,Pa,,,tauv,surface_downward_northward_stress,,Pa,time: mean,,,,,down,real,longitude latitude time,tauv,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Surface Upward Latent Heat Flux,W m-2,includes both evaporation and sublimation,,hfls,surface_upward_latent_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfls,atmos,,,,
+1,Surface Upward Sensible Heat Flux,W m-2,,,hfss,surface_upward_sensible_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfss,atmos,,,,
+1,Surface Downwelling Longwave Radiation,W m-2,,,rlds,surface_downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rlds,atmos,,,,
+1,Surface Upwelling Longwave Radiation,W m-2,,,rlus,surface_upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlus,atmos,,,,
+1,Surface Downwelling Shortwave Radiation,W m-2,,,rsds,surface_downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsds,atmos,,,,
+1,Surface Upwelling Shortwave Radiation,W m-2,,,rsus,surface_upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsus,atmos,,,,
+1,Surface Downwelling Clear-Sky Shortwave Radiation,W m-2,,,rsdscs,surface_downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdscs,atmos,,,,
+1,Surface Upwelling Clear-Sky Shortwave Radiation,W m-2,,,rsuscs,surface_upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsuscs,atmos,,,,
+1,Surface Downwelling Clear-Sky Longwave Radiation,W m-2,,,rldscs,surface_downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rldscs,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,TOA Incident Shortwave Radiation,W m-2,incident shortwave at the top of the atmosphere,,rsdt,toa_incoming_shortwave_flux,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdt,atmos,,,,
+1,TOA Outgoing Shortwave Radiation,W m-2,at the top of the atmosphere,,rsut,toa_outgoing_shortwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsut,atmos,,,,
+1,TOA Outgoing Longwave Radiation,W m-2,at the top of the atmosphere (to be compared with satellite measurements),,rlut,toa_outgoing_longwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlut,atmos,,,,
+1,TOA Outgoing Clear-Sky Longwave Radiation,W m-2,,,rlutcs,toa_outgoing_longwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlutcs,atmos,,,,
+1,TOA Outgoing Clear-Sky Shortwave Radiation,W m-2,,,rsutcs,toa_outgoing_shortwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsutcs,atmos,,,,
+,,,,,,,,,,,,,,,real,,,atmos,,,,
+1,Water Vapor Path,kg m-2,vertically integrated through the atmospheric column,,prw,atmosphere_water_vapor_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,prw,atmos,,,,
+1,Total Cloud Fraction,%,"for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.",,clt,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,clt,atmos,,,,
+1,Condensed Water Path,kg m-2,calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clwvi,atmosphere_cloud_condensed_water_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,clwvi,atmos,,,,
+1,Ice Water Path,kg m-2,calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clivi,atmosphere_cloud_ice_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,clivi,atmos,,,,
+,,,,,,,,,,,,,,,,,,atmos,,,,
+1,Net Downward Flux at Top of Model,W m-2,"i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.",,rtmt,net_downward_radiative_flux_at_top_of_atmosphere_model,,W m-2,time: mean,,,,,down,real,longitude latitude time,rtmt,atmos,,,,
+1,Air Pressure at Convective Cloud Base,Pa,,,ccb,air_pressure_at_convective_cloud_base,,Pa,time: mean,,,,,,real,longitude latitude time,ccb,atmos,,,,
+1,Air Pressure at Convective Cloud Top,Pa,,,cct,air_pressure_at_convective_cloud_top,,Pa,time: mean,,,,,,real,longitude latitude time,cct,atmos,,,,
+1,Fraction of Time Convection Occurs,1,Fraction of time that convection occurs in the grid cell .,,ci ,,,1,time: mean,,,,,,real,longitude latitude time,ci ,atmos,,,,
+1,Fraction of Time Shallow Convection Occurs,1,Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only),,sci,,,1,time: mean,,,,,,real,longitude latitude time,sci,atmos,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2,kg  m-2 s-1,"This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.",,fco2antt,,,kg  m-2 s-1,time: mean,,,,,up,real,longitude latitude time,fco2antt,atmos,,,,
+1,Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2,kg m-2 s-1,"This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)",,fco2fos,,,kg m-2 s-1,time: mean,,,,,up,real,longitude latitude time,fco2fos,atmos,,,,
+1,Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources,kg m-2 s-1,"Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e. [...]
diff --git a/Tables_csv/cf30min.csv b/Tables_csv/cf30min.csv
new file mode 100644
index 0000000..d8bf3da
--- /dev/null
+++ b/Tables_csv/cf30min.csv
@@ -0,0 +1,48 @@
+CMOR Table cf30min: CFMIP 30-Minute Cloud Diagnostic Fields,,,,,cf30min,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,
+"For further guidance, please see http://www.cfmip.net",,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,
+"The spread sheet ""CFMIP expts."" specifies the simulations and time-periods for which the cloud diagnostic fields listed on this spread sheet should be saved.",,,,,,,,,,,,,,,,,,
+"CMOR Table cf30Min: ""CFMIP 30-min"" -- 2-D and 3-D fields on model levels sampled approximately every half-hour at specified locations (about 115 stations)",,,,,,,,,,,,,,,,,,
+"The sampling interval must be the integer multiple of the model time-step that is nearest a half hour. Outputs should be instantaneous (not time mean) and from nearest gridbox (no spatial interpolation.)  Note that except for the quantities appearing in the Amon spreadsheet (first line of table below), all other fields are 3-D. ",,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,confirmed or likely to be confirmed standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm
+1,"see the ""Amon"" spreadsheet for list of quantities",,"This table includes the 2-D variables listed in the ""Amon"" spreadsheet, omitting, however, the daily maximum and minimum temperatures.  All variables should be reported as synoptic fields, not daily means.  ",,?,,,,time: point,,,,,,real,"site, time1",,atmos
+1,Cloud Area Fraction,%,Include both large-scale and convective cloud.,,cl,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,"alevel, site, time1",cl,atmos
+1,Mass Fraction of Cloud Liquid Water,1,Include both large-scale and convective cloud.  Calculate as the mass of  cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.,,clw,mass_fraction_of_cloud_liquid_water__in_air,,1,time: point,,,,,,real,"alevel, site, time1",clw,atmos
+1,Mass Fraction of Cloud Ice,1,Include both large-scale and convective cloud. Calculate as the mass of  cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.,,cli,mass_fraction_of_cloud_ice_in_air,,1,time: point,,,,,,real,"alevel, site, time1",cli,atmos
+1,Convective Mass Flux,kg m-2 s-1,"The atmosphere convective mass flux is the vertical transport of mass for a field of cumulus clouds or cloudless thermals, given by the product of air density and vertical velocity. Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the updrafts).",,mc,convective_mass_flux,,kg m-2 s-1,time: point,,,,,,real,"alevel, site, time1",mc,atmos
+1,Air Temperature,K,,,ta,air_temperature,,K,time: point,,,,,,real,"alevel, site, time1",ta,atmos
+1,Eastward Wind,m s-1,,,ua,eastward_wind,,m s-1,time: point,,,,,,real,"alevel, site, time1",ua,atmos
+1,Northward Wind,m s-1,,,va,northward_wind,,m s-1,time: point,,,,,,real,"alevel, site, time1",va,atmos
+1,Specific Humidity,1,,,hus,specific_humidity,,1,time: point,,,,,,real,"alevel, site, time1",hus,atmos
+1,Relative Humidity,%,"This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hur,relative_humidity,,%,time: point,,,,,,real,"alevel, site, time1",hur,atmos
+1,omega (=dp/dt),Pa s-1,"commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)",,wap,lagrangian_tendency_of_air_pressure,,Pa s-1,time: point,,,,,,real,"alevel, site, time1",wap,atmos
+1,Geopotential Height,m,,,zg,geopotential_height,,m,time: point,,,,,,real,"alevel, site, time1",zg,atmos
+1,Upwelling Longwave Radiation,W m-2,,,rlu,upwelling_longwave_flux_in_air,,W m-2,time: point,,,,,up,real,"alevel, site, time1",rlu,atmos
+1,Upwelling Shortwave Radiation,W m-2,,,rsu,upwelling_shortwave_flux_in_air,,W m-2,time: point,,,,,up,real,"alevel, site, time1",rsu,atmos
+1,Downwelling Longwave Radiation,W m-2,,,rld,downwelling_longwave_flux_in_air,,W m-2,time: point,,,,,down,real,"alevel, site, time1",rld,atmos
+1,Downwelling Shortwave Radiation,W m-2,,,rsd,downwelling_shortwave_flux_in_air,,W m-2,time: point,,,,,down,real,"alevel, site, time1",rsd,atmos
+1,Upwelling Clear-Sky Longwave Radiation,W m-2,,,rlucs,upwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,up,real,"alevel, site, time1",rlucs,atmos
+1,Upwelling Clear-Sky Shortwave Radiation,W m-2,,,rsucs,upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,up,real,"alevel, site, time1",rsucs,atmos
+1,Downwelling Clear-Sky Longwave Radiation,W m-2,,,rldcs,downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,down,real,"alevel, site, time1",rldcs,atmos
+1,Downwelling Clear-Sky Shortwave Radiation,W m-2,,,rsdcs,downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,down,real,"alevel, site, time1",rsdcs,atmos
+1,Tendency of Air Temperature,K s-1,,,tnt ,,tendency_of_air_temperature,K s-1,time: point,,,,,,real,"alevel, site, time1",tnt ,atmos
+1,Tendency of Air Temperature due to Advection,K s-1,,,tnta ,,tendency_of_air_temperature_due_to_advection,K s-1,time: point,,,,,,real,"alevel, site, time1",tnta ,atmos
+1,Tendency of Air Temperature due to Diabatic Processes,K s-1,,,tntdp ,,tendency_of_air_temperature_due_to_diabatic_processes,K s-1,time: point,,,,,,real,"alevel, site, time1",tntdp ,atmos
+1,Tendency of Air Temperature due to Stratiform Cloud Condensation and Evaporation,K s-1,,,tntscce ,,tendency_of_air_temperature_due_to_stratiform_cloud_condensation_and_evaporation,K s-1,time: point,,,,,,real,"alevel, site, time1",tntscce ,atmos
+1,Tendency of Air Temperature due to Radiative Heating,K s-1,,,tntr ,,tendency_of_air_temperature_due_to_radiative_heating,K s-1,time: point,,,,,,real,"alevel, site, time1",tntr ,atmos
+1,Tendency of Air Temperature due to Moist Convection,K s-1,,,tntmc ,,tendency_of_air_temperature_due_to_moist_convection,K s-1,time: point,,,,,,real,"alevel, site, time1",tntmc ,atmos
+1,Tendency of Specific Humidity,s-1,,,tnhus,,tendency_of_specific_humidity,s-1,time: point,,,,,,real,"alevel, site, time1",tnhus,atmos
+1,Tendency of Specific Humidity due to Advection,s-1,,,tnhusa ,,tendency_of_specific_humidity_due_to_advection,s-1,time: point,,,,,,real,"alevel, site, time1",tnhusa ,atmos
+1,Tendency of Specific Humidity due to Convection,s-1,,,tnhusc ,,tendency_of_specific_humidity_due_to_convection,s-1,time: point,,,,,,real,"alevel, site, time1",tnhusc ,atmos
+1,Tendency of Specific Humidity due to Diffusion,s-1,,,tnhusd ,,tendency_of_specific_humidity_due_to_diffusion,s-1,time: point,,,,,,real,"alevel, site, time1",tnhusd ,atmos
+1,Tendency of Specific Humidity due to Stratiform Cloud Condensation and Evaporation,s-1,,,tnhusscce ,,tendency_of_specific_humidity_due_to_stratiform_cloud_condensation_and_evaporation,s-1,time: point,,,,,,real,"alevel, site, time1",tnhusscce ,atmos
+1,Tendency of Specific Humidity due to Model Physics,s-1,,,tnhusmp ,,tendency_of_specific_humidity_due_to_model_physics,s-1,time: point,,,,,,real,"alevel, site, time1",tnhusmp ,atmos
+1,Eddy Viscosity Coefficient for Momentum Variables,m2 s-1,,,evu,,eddy_viscosity_coefficients_for_momentum_variables,m2 s-1,time: point,,,,,,real,"alevel, site, time1",evu,atmos
+1,Eddy Diffusivity Coefficient for Temperature Variable,m2 s-1,,,edt,,eddy_diffusivity_coefficients_for_temperature_variable,m2 s-1,time: point,,,,,,real,"alevel, site, time1",edt,atmos
+1,Eddy Diffusivity Coefficient for Water Variables,m2 s-1,,,edw,,eddy_diffusivity_coefficients_for_water_variables,m2 s-1,time: point,,,,,,real,"alevel, site, time1",edw,atmos
\ No newline at end of file
diff --git a/Tables_csv/cf3hr.csv b/Tables_csv/cf3hr.csv
new file mode 100644
index 0000000..24026d2
--- /dev/null
+++ b/Tables_csv/cf3hr.csv
@@ -0,0 +1,57 @@
+CMOR Table cf3hr: CFMIP 3-Hourly Cloud Diagnostic Fields,,,,,cf3hr,3hr,,,,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,,,,,
+"For further guidance, please see http://www.cfmip.net",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+"The spread sheet ""CFMIP output"" specifies the simulations and time-periods for which the cloud diagnostic fields listed on this spread sheet should be saved.",,,,,,,,,,,,,,,,,,,,,,
+"In CMOR Table cf3hr: ""CFMIP 3-hourly orbital offline"" -- CloudSat/CALIPSO/PARASOL simulator output in orbital curtain format",,,,,,,,,,,,,,,,,,,,,,
+"(For most of these variables, extract simulator input variables from models along A-train orbits, and run COSP on these in 'offline' mode.)",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,CALIPSO Cloud Area Fraction,%,(40 height levels),,  clcalipso ,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,location alt40 time1,  clcalipso ,atmos,,,,
+1,CALIPSO Cloud Fraction Undetected by CloudSat,%,(40 height levels)  Clouds detected by CALIPSO but below the detectability threshold of CloudSat,,clcalipso2  ,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,location alt40 time1,clcalipso2  ,atmos,,,,
+1,CloudSat Radar Reflectivity CFAD,1,CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .,,cfadDbze94,histogram_of_equivalent_reflectivity_factor_over_height_above_reference_ellipsoid,,1,time: point,,,,,,real,location alt40 dbze time1,cfadDbze94,atmos,,,,
+1,CALIPSO Scattering Ratio CFAD,1,CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .,,cfadLidarsr532,histogram_of_backscattering_ratio_over_height_above_reference_ellipsoid,,1,time: point,,,,,,real,location alt40 scatratio time1,cfadLidarsr532,atmos,,,,
+1,PARASOL Reflectance,1,Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).,,parasolRefl,toa_bidirectional_reflectance,,1,time: point,,,,,,real,location sza5 time1,parasolRefl,atmos,,,,
+1,CALIPSO Total Cloud Fraction ,%,,,cltcalipso,cloud_area_fraction,,%,time: point,,,,,,real,location time1,cltcalipso,atmos,,,,
+1,CALIPSO Low Level Cloud Fraction ,%,,,cllcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,location time1 p840,cllcalipso,atmos,,,,
+1,CALIPSO Mid Level Cloud Fraction ,%,,,clmcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,location time1 p560,clmcalipso,atmos,,,,
+1,CALIPSO High Level Cloud Fraction ,%,,,clhcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,location time1 p220,clhcalipso,atmos,,,,
+1,Longitude,degrees_east,function of time,,lon,longitude,,degrees_east,time: point,,,,,,real,location time1,lon,atmos,,,,
+1,Latitude,degrees_north,function of time,,lat,latitude,,degrees_north,time: point,,,,,,real,location time1,lat,atmos,,,,
+1,Offset Time,day,"this ""offset time"" should be added to the value stored in the ""time dimension"" to get the actual time.  This actual time is the time (UTC) of the corresponding point in the satellite orbit used to extract the model data.",,toffset,time,,day,,,,,,,real,location time1,toffset,atmos,,,,
+"In CMOR Table cf3hr: ""CFMIP 3-hourly inline"" -- 2-D fields as specified in the Amon table plus convective cloud fraction and 3-D fields on model levels (or half levels, as indicated) sampled synoptically every 3 hours (i.e., not time-mean) at 0Z, 3Z, 6Z, 9Z, 12Z, 15Z, 18Z, and 21Z.",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,(use names for Amon 2D table),,"This table includes all the 2-D variables listed in the Amon table, omitting, however, the daily maximum and minimum temperatures.  All variables should be reported as synoptic fields, not daily means.  ",,include Amon 2D,,,,time: point,,,,,,real,longitude latitude time1,,atmos,,area: areacella,,
+1,Convective Cloud Fraction,%,"for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include only convective cloud.  Besides the quantities from the Amon table, this is the only other 2-D field in this table.",,cltc,convective_cloud_area_fraction,,%,time: point,0,100,,,,real,longitude latitude time1,cltc,atmos,,area: areacella,,
+2,Altitude of Model Full-Levels,m,"This is actual height above mean sea level, not geopotential height",,zfull,height_above_reference_ellipsoid,,m,time: point,,,,,,real,longitude latitude alevel time1,zfull,atmos,,area: areacella,,
+2,Altitude of Model Half-Levels,m,"This is actual height above mean sea level, not geopotential height.  This is actual height above mean sea level, not geopotential height.  Include both the top of the model atmosphere and surface levels.",,zhalf,height_above_reference_ellipsoid,,m,time: point,,,,,,real,longitude latitude alevhalf time1,zhalf,atmos,,area: areacella,,
+2,Pressure at Model Full-Levels,Pa,"provide this field for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.",,pfull,air_pressure,,Pa,time: point,,,,,,real,longitude latitude alevel time1,pfull,atmos,,area: areacella,,
+2,Pressure at Model Half-Levels,Pa,"provide this field for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.",,phalf,air_pressure,,Pa,time: point,,,,,,real,longitude latitude alevhalf time1,phalf,atmos,,area: areacella,,
+2,Air Temperature,K,,,ta,air_temperature,,K,time: point,,,,,,real,longitude latitude alevel time1,ta,atmos,,area: areacella,,
+2,Mass Fraction of Water,1,include all phases of water,,h2o,mass_fraction_of_water_in_air,,1,time: point,,,,,,real,longitude latitude alevel time1,h2o,atmos,,area: areacella,,
+2,Mass Fraction of Stratiform Cloud Liquid Water,1,Calculate as the mass of stratiform cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clws,mass_fraction_of_stratiform_cloud_liquid_water_in_air,,1,time: point,,,,,,real,longitude latitude alevel time1,clws,atmos,,area: areacella,,
+2,Mass Fraction of Stratiform Cloud Ice,1,Calculate as the mass of stratiform cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clis,mass_fraction_of_stratiform_cloud_ice_in_air,,1,time: point,,,,,,real,longitude latitude alevel time1,clis,atmos,,area: areacella,,
+2,Mass Fraction of Convective Cloud Liquid Water,1,Calculate as the mass of convective cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clwc,mass_fraction_of_convective_cloud_liquid_water_in_air,,1,time: point,,,,,,real,longitude latitude alevel time1,clis,atmos,,area: areacella,,
+2,Mass Fraction of Convective Cloud Ice,1,Calculate as the mass of convective cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clic,mass_fraction_of_convective_cloud_ice_in_air,,1,time: point,,,,,,real,longitude latitude alevel time1,clic,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Stratiform Cloud Liquid Water ,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffclws,effective_radius_of_stratiform_cloud_liquid_water_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffclws,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Stratiform Cloud Ice,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffclis,effective_radius_of_stratiform_cloud_ice_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffclis,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Convective Cloud Liquid Water,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffclwc,effective_radius_of_convective_cloud_liquid_water_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffclwc,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Convective Cloud Ice,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffclic,effective_radius_of_convective_cloud_ice_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffclic,atmos,,area: areacella,,
+2,Stratiform Graupel Flux,kg m-2 s-1 ,report on model half-levels,,grpllsprof,large_scale_graupel_flux,,kg m-2 s-1 ,time: point,,,,,,real,longitude latitude alevel time1,grpllsprof,atmos,,area: areacella,,
+2,Convective Rainfall Flux,kg m-2 s-1 ,report on model half-levels,,prcprof,convective_rainfall_flux,,kg m-2 s-1 ,time: point,,,,,,real,longitude latitude alevel time1,prcprof,atmos,,area: areacella,,
+2,Stratiform Rainfall Flux,kg m-2 s-1 ,report on model half-levels,,prlsprof,large_scale_rainfall_flux,,kg m-2 s-1 ,time: point,,,,,,real,longitude latitude alevel time1,prlsprof,atmos,,area: areacella,,
+2,Convective Snowfall Flux,kg m-2 s-1 ,report on model half-levels,,prsnc,convective_snowfall_flux,,kg m-2 s-1 ,time: point,,,,,,real,longitude latitude alevel time1,prsnc,atmos,,area: areacella,,
+2,Stratiform Snowfall Flux,kg m-2 s-1 ,report on model half-levels,,prlsns,large_scale_snowfall_flux,,kg m-2 s-1 ,time: point,,,,,,real,longitude latitude alevel time1,prlsns,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Stratiform Graupel,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffgrpls,effective_radius_of_stratiform_cloud_graupel_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffgrpls,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Convective Rainfall,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffrainc,effective_radius_of_convective_cloud_rain_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffrainc,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Stratiform Rainfall,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffrains,effective_radius_of_stratiform_cloud_rain_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffrains,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Convective Snowfall,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffsnowc,effective_radius_of_convective_cloud_snow_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffsnowc,atmos,,area: areacella,,
+2,Hydrometeor Effective Radius of Stratiform Snowfall,m,This is defined as the in-cloud ratio of the third moment over the second moment of the particle size distribution (obtained by considering only the cloudy portion of the grid cell). ,,reffsnows,effective_radius_of_stratiform_cloud_snow_particle,,m,time: point,,,,,,real,longitude latitude alevel time1,reffsnows,atmos,,area: areacella,,
+2,Stratiform Cloud Optical Depth,1,This is the in-cloud optical depth obtained by considering only the cloudy portion of the grid cell.,,dtaus,atmosphere_optical_thickness_due_to_stratiform_cloud,,1,time: point,,,,,,real,longitude latitude alevel time1,dtaus,atmos,,area: areacella,,
+2,Convective Cloud Optical Depth,1,This is the in-cloud optical depth obtained by considering only the cloudy portion of the grid cell,,dtauc,atmosphere_optical_thickness_due_to_convective_cloud,,1,time: point,,,,,,real,longitude latitude alevel time1,dtauc,atmos,,area: areacella,,
+2,Stratiform Cloud Emissivity,1,This is the in-cloud emissivity obtained by considering only the cloudy portion of the grid cell.,,dems,stratiform_cloud_longwave_emissivity,,1,time: point,,,,,,real,longitude latitude alevel time1,dems,atmos,,area: areacella,,
+2,Convective Cloud Emissivity,1,This is the in-cloud emissivity obtained by considering only the cloudy portion of the grid cell.,,demc,convective_cloud_longwave_emissivity,,1,time: point,,,,,,real,longitude latitude alevel time1,demc,atmos,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/cfDa.csv b/Tables_csv/cfDa.csv
new file mode 100644
index 0000000..ca78f81
--- /dev/null
+++ b/Tables_csv/cfDa.csv
@@ -0,0 +1,60 @@
+CMOR Table  cfDay: CFMIP Daily-Mean Cloud Diagnostic Fields,,,,, cfDay,day,,,,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,,,,,
+"For further guidance, please see http://www.cfmip.net",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+"The spread sheet ""CFMIP output"" specifies the simulations and time-periods for which the cloud diagnostic fields listed on this spread sheet should be saved.",,,,,,,,,,,,,,,,,,,,,,
+"In CMOR Table  cfDay: ""CFMIP daily 2D"" -- daily mean 2-D fields including inline ISCCP/CloudSat/CALIPSO/ PARASOL simulator output",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Surface Air Pressure,Pa,,,ps,surface_air_pressure,,Pa,time: mean,,,,,,real,longitude latitude time,ps,atmos,,area: areacella,,
+1,TOA Incident Shortwave Radiation,W m-2,,,rsdt,toa_incoming_shortwave_flux,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdt,atmos,,area: areacella,,
+1,TOA Outgoing Shortwave Radiation,W m-2,,,rsut,toa_outgoing_shortwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsut,atmos,,area: areacella,,
+1,Surface Downwelling Clear-Sky Shortwave Radiation ,W m-2,,,rsdscs,surface_downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsdscs,atmos,,area: areacella,,
+1,Surface Upwelling Clear-Sky Shortwave Radiation,W m-2,,,rsuscs,,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsuscs,atmos,,area: areacella,,
+1,Surface Downwelling Clear-Sky Longwave Radiation ,W m-2,,,rldscs,surface_downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude time,rldscs,atmos,,area: areacella,,
+1,TOA Outgoing Clear-Sky Longwave Radiation,W m-2,,,rlutcs,toa_outgoing_longwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlutcs,atmos,,area: areacella,,
+1,TOA Outgoing Clear-Sky Shortwave Radiation,W m-2,,,rsutcs,toa_outgoing_shortwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsutcs,atmos,,area: areacella,,
+1,Total Cloud Fraction,% ,"for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.",,clt,cloud_area_fraction,,% ,time: mean,,,,,,real,longitude latitude time,clt,atmos,,area: areacella,,
+1,Condensed Water Path,kg m-2 ,calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clwvi,atmosphere_cloud_condensed_water_content,,kg m-2 ,time: mean,,,,,,real,longitude latitude time,clwvi,atmos,,area: areacella,,
+1,Ice Water Path,kg m-2 ,calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clivi,atmosphere_cloud_ice_content,,kg m-2 ,time: mean,,,,,,real,longitude latitude time,clivi,atmos,,area: areacella,,
+1,omega (=dp/dt),Pa s-1,"at 500 hPa level; commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)",,wap500,lagrangian_tendency_of_air_pressure,,Pa s-1,time: mean,,,,,,real,longitude latitude time p500,wap500,atmos,,area: areacella,,
+1,Air Temperature,K,at 700 hPa level,,ta700,air_temperature,,K,time: mean,,,,,,real,longitude latitude time p700,ta700,atmos,,area: areacella,,
+1,Air Pressure at Convective Cloud Base,Pa,,,pccb,air_pressure_at_convective_cloud_base,,Pa,time: mean,,,,,,real,longitude latitude time,pccb,atmos,,area: areacella,,
+1,Air Pressure at Convective Cloud Top,Pa,,,pcct,air_pressure_at_convective_cloud_top,,Pa,time: mean,,,,,,real,longitude latitude time,pcct,atmos,,area: areacella,,
+1,Convective Precipitation,kg m-2 s-1 ,,,prc,convective_precipitation_flux,,kg m-2 s-1 ,time: mean,,,,,,real,longitude latitude time,prc,atmos,,area: areacella,,
+1,Surface Upward Latent Heat Flux,W m-2,,,hfls,surface_upward_latent_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfls,atmos,,area: areacella,,
+1,Surface Upward Sensible Heat Flux,W m-2,,,hfss,surface_upward_sensible_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfss,atmos,,area: areacella,,
+1,Surface Downwelling Longwave Radiation,W m-2,,,rlds,surface_downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rlds,atmos,,area: areacella,,
+1,Surface Upwelling Longwave Radiation,W m-2,,,rlus,surface_upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlus,atmos,,area: areacella,,
+1,Surface Downwelling Shortwave Radiation,W m-2,,,rsds,surface_downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsds,atmos,,area: areacella,,
+1,Surface Upwelling Shortwave Radiation,W m-2,,,rsus,surface_upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsus,atmos,,area: areacella,,
+1,TOA Outgoing Longwave Radiation,W m-2,,,rlut,toa_outgoing_longwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlut,atmos,,area: areacella,,
+1,ISCCP Total Total Cloud Fraction,%,,,cltisccp,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,cltisccp,atmos,,area: areacella,,
+1,ISCCP Mean Cloud Albedo,1,"When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README",,albisccp,cloud_albedo,,1,time: mean,,,,,,real,longitude latitude time,albisccp,atmos,,area: areacella,,
+1,ISCCP Mean Cloud Top Pressure,Pa ,"When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README",,pctisccp,air_pressure_at_cloud_top,,Pa ,time: mean,,,,,,real,longitude latitude time,pctisccp,atmos,,area: areacella,,
+1,PARASOL Reflectance,1,Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).,,parsolRefl,toa_bidirectional_reflectance,,1,time: mean,,,,,,real,longitude latitude sza5 time,parsolRefl,atmos,,area: areacella,,
+1,CALIPSO Total Cloud Fraction ,%,,,cltcalipso,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,cltcalipso,atmos,,area: areacella,,
+1,CALIPSO Low Level Cloud Fraction ,%,,,cllcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time,cllcalipso,atmos,,area: areacella,,
+1,CALIPSO Mid Level Cloud Fraction ,%,,,clmcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time,clmcalipso,atmos,,area: areacella,,
+1,CALIPSO High Level Cloud Fraction ,%,,,clhcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time,clhcalipso,atmos,,area: areacella,,
+"In CMOR Table  cfDay: ""CFMIP daily 3D"" --daily mean 3-D fields on model levels plus CALIPSO and ISCCP cloud fractions",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Eastward Wind,m s-1 ,,,ua,eastward_wind,,m s-1 ,time: mean,,,,,,real,longitude latitude alevel time,ua,atmos,,area: areacella,,
+1,Northward Wind,m s-1,,,va,northward_wind,,m s-1,time: mean,,,,,,real,longitude latitude alevel time,va,atmos,,area: areacella,,
+1,Air Temperature,K,,,ta,air_temperature,,K,time: mean,,,,,,real,longitude latitude alevel time,ta,atmos,,area: areacella,,
+1,Specific Humidity,1,,,hus,specific_humidity,,1,time: mean,,,,,,real,longitude latitude alevel time,hus,atmos,,area: areacella,,
+1,omega (=dp/dt),Pa s-1,"commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)",,wap,lagrangian_tendency_of_air_pressure,,Pa s-1,time: mean,,,,,,real,longitude latitude alevel time,wap,atmos,,area: areacella,,
+1,Geopotential Height,m,,,zg,geopotential_height,,m,time: mean,,,,,,real,longitude latitude alevel time,zg,atmos,,area: areacella,,
+1,Relative Humidity,%,"This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hur,relative_humidity,,%,time: mean,,,,,,real,longitude latitude alevel time,hur,atmos,,area: areacella,,
+1,Cloud Area Fraction in Atmosphere Layer,%,,,cl,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alevel time,cl,atmos,,area: areacella,,
+1,Mass Fraction of Cloud Liquid Water,1,Calculate as the mass of  cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clw,mass_fraction_of_cloud_liquid_water_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time,clw,atmos,,area: areacella,,
+1,Mass Fraction of Cloud Ice,1,Calculate as the mass of cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,cli,mass_fraction_of_cloud_ice_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time,cli,atmos,,area: areacella,,
+1,Convective Mass Flux,kg m-2 s-1 ,"Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).",,mc,atmosphere_net_upward_convective_mass_flux,,kg m-2 s-1 ,time: mean,,,,,up,real,longitude latitude alevhalf time,mc,atmos,,area: areacella,,
+1,CALIPSO Cloud Fraction,%,40 levels,,clcalipso ,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alt40 time,clcalipso ,atmos,,area: areacella,,
+1,ISCCP Cloud Area Fraction,%,7 levels x 7 tau,,clisccp,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude tau plev7 time,clisccp,atmos,,area: areacella,,
+1,Pressure on Model Levels,Pa,"This field is needed only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.",,pfull,air_pressure,,Pa,time: mean,,,,,,real,longitude latitude alevel time,pfull,atmos,,area: areacella,,
+1,Pressure on Model Half-Levels,Pa,"This field is needed only for models in which the pressure can't be calculated from the vertical coordinate information stored already for each variable.  Thus, the pressures are needed for height or theta-coordinate models, for example, but not sigma- or eta-coordinate models.",,phalf,air_pressure,,Pa,time: mean,,,,,,real,longitude latitude alevhalf time,phalf,atmos,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/cfMon.csv b/Tables_csv/cfMon.csv
new file mode 100644
index 0000000..05d41da
--- /dev/null
+++ b/Tables_csv/cfMon.csv
@@ -0,0 +1,113 @@
+CMOR Table cfMon: CFMIP Monthly-Mean Cloud Diagnostic Fields,,,,,cfMon,mon,,,,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,,,,,
+"For further guidance, please see http://www.cfmip.net",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+"The spread sheet ""CFMIP output"" specifies the simulations and time-periods for which the cloud diagnostic fields listed on this spread sheet should be saved.",,,,,,,,,,,,,,,,,,,,,,
+"In CMOR Table cfMon: ""CFMIP monthly 3D""--monthly mean 3-D fields on model levels (or half levels in the case of fluxes)",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Upwelling Longwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rlu,upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rlu,atmos,,area: areacella,,
+1,Upwelling Shortwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rsu,upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rsu,atmos,,area: areacella,,
+1,Downwelling Longwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rld,downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rld,atmos,,area: areacella,,
+1,Downwelling Shortwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rsd,downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rsd,atmos,,area: areacella,,
+1,Upwelling Clear-Sky Longwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rlucs,upwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rlucs,atmos,,area: areacella,,
+1,Upwelling Clear-Sky Shortwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rsucs,upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rsucs,atmos,,area: areacella,,
+1,Downwelling Clear-Sky Longwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rldcs,downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rldcs,atmos,,area: areacella,,
+1,Downwelling Clear-Sky Shortwave Radiation,W m-2,Include also the fluxes at the surface and TOA.,,rsdcs,downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rsdcs,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Air Temperature,K,,,ta,air_temperature,,K,time: mean,,,,,,real,longitude latitude alevel time,ta,atmos,,area: areacella,,
+1,Tendency of Air Temperature,K s-1,,,tnt,tendency_of_air_temperature,,K s-1,time: mean,,,,,,real,longitude latitude alevel time,tnt,atmos,,area: areacella,,
+1,Tendency of Air Temperature due to Advection,K s-1,,,tnta ,tendency_of_air_temperature_due_to_advection,,K s-1,time: mean,,,,,,real,longitude latitude alevel time,tnta ,atmos,,area: areacella,,
+1,Tendency of Air Temperature due to Diabatic Processes,K s-1,,,tntmp,tendency_of_air_temperature_due_to_model_physics,,K s-1,time: mean,,,,,,real,longitude latitude alevel time,tntmp,atmos,,area: areacella,,
+1,Tendency of Air Temperature Due to Stratiform Cloud and Precipitation and Boundary Layer Mixing,K s-1,,,tntscpbl,tendency_of_air_temperature_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing,,K s-1,time: mean,,,,,,real,longitude latitude alevel time,tntscpbl,atmos,,area: areacella,,
+1,Tendency of Air Temperature due to Radiative Heating,K s-1,,,tntr ,tendency_of_air_temperature_due_to_radiative_heating,,K s-1,time: mean,,,,,,real,longitude latitude alevel time,tntr ,atmos,,area: areacella,,
+1,Tendency of Air Temperature due to Moist Convection,K s-1,,,tntc,tendency_of_air_temperature_due_to_convection,,K s-1,time: mean,,,,,,real,longitude latitude alevel time,tntc,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Specific Humidity,1,,,hus,specific_humidity,,1,time: mean,,,,,,real,longitude latitude alevel time,hus,atmos,,area: areacella,,
+1,Tendency of Specific Humidity,s-1,,,tnhus,tendency_of_specific_humidity,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnhus,atmos,,area: areacella,,
+1,Tendency of Specific Humidity due to Advection,s-1,,,tnhusa,tendency_of_specific_humidity_due_to_advection,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnhusa,atmos,,area: areacella,,
+1,Tendency of Specific Humidity due to Convection,s-1,,,tnhusc,tendency_of_specific_humidity_due_to_convection,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnhusc,atmos,,area: areacella,,
+1,Tendency of Specific Humidity due to Diffusion,s-1,,,tnhusd,tendency_of_specific_humidity_due_to_diffusion,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnhusd,atmos,,area: areacella,,
+1,Tendency of Specific Humidity due to Stratiform Cloud Condensation and Evaporation,s-1,,,tnhusscpbl,tendency_of_specific_humidity_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnhusscpbl,atmos,,area: areacella,,
+1,Tendency of Specific Humidity due to Model Physics,s-1,"This should include sources and sinks from parametrized physics (e.g. convection, stratiform condensation/evaporation, etc.) and should exclude sources and sinks from resolved dynamics and diffusion.",,tnhusmp,tendency_of_specific_humidity_due_to_model_physics,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnhusmp,atmos,,area: areacella,,
+,,,,,,,,,time: mean,,,,,,,,,,,,,
+1,Eddy Viscosity Coefficients for Momentum,m2 s-1,,,eviscu,atmosphere_momentum_diffusivity,,m2 s-1,time: mean,,,,,,real,longitude latitude alevel time,eviscu,atmos,,area: areacella,,
+1,Eddy Diffusivity Coefficients for Temperature,m2 s-1,,,evisct,atmosphere_heat_diffusivity,,m2 s-1,time: mean,,,,,,real,longitude latitude alevel time,evisct,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,area: areacella,,
+2,Convective Cloud Area Fraction,%,,,clc,convective_cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alevel time,clc,atmos,,area: areacella,,
+2,Mass Fraction of Convective Cloud Liquid Water ,1,Calculate as the mass of convective cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,, clwc,mass_fraction_of_convective_cloud_liquid_water_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time, clwc,atmos,,area: areacella,,
+2,Mass Fraction of Convective Cloud Ice,1,Calculate as the mass of convective cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clic,mass_fraction_of_convective_cloud_ice_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time,clic,atmos,,area: areacella,,
+2,Stratiform Cloud Area Fraction,%,,,cls,stratiform_cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alevel time,cls,atmos,,area: areacella,,
+2,Mass Fraction of Stratiform Cloud Liquid Water,1,Calculate as the mass of stratiform cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clws,mass_fraction_of_stratiform_cloud_liquid_water_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time,clws,atmos,,area: areacella,,
+2,Mass Fraction of Stratiform Cloud Ice,1,Calculate as the mass of stratiform cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clis,mass_fraction_of_stratiform_cloud_ice_in_air,,1,time: mean,,,,,,real,longitude latitude alevel time,clis,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+2,Updraft Convective Mass Flux,kg m-2 s-1 ,"Report on model half-levels (i.e., model layer bounds and not standard pressures).   Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).",,mcu,atmosphere_updraft_convective_mass_flux,,kg m-2 s-1 ,time: mean,,,,,up,real,longitude latitude alevhalf time,mcu,atmos,,area: areacella,,
+2,Downdraft Convective Mass Flux,kg m-2 s-1 ,"Report on model half-levels (i.e., model layer bounds and not standard pressures).  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).",,mcd,atmosphere_downdraft_convective_mass_flux,,kg m-2 s-1 ,time: mean,,,,,down,real,longitude latitude alevhalf time,mcd,atmos,,area: areacella,,
+2,Shallow Convective Mass Flux,kg m-2 s-1 ,"Report on model half-levels (i.e., model layer bounds and not standard pressures).   The net mass flux should represent the difference between the updraft and downdraft components.  For models with a distinct shallow convection scheme, calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).",,smc,atmosphere_net_upward_shallow_convective_mass_flux,,kg m-2 s-1 ,time: mean,,,,,up,real,long [...]
+2,Deep Convective Mass Flux,kg m-2 s-1 ,"Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.   Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the cloud).",,dmc,atmosphere_net_upward_deep_convective_mass_flux,,kg m-2 s-1 ,time: mean,,,,,up,real,longitude latitude alevhalf time,dmc,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Condensation and Evaporation,s-1,,,tnsclwce ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_condensation_and_evaporation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwce ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water Due to Convective Detrainment,s-1,,,tnsclwcd ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_convective_detrainment,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwcd ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Homogeneous Nucleation,s-1,,,tnsclwhon ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_homogeneous_nucleation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwhon ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Heterogeneous Nucleation,s-1,,,tnsclwhen ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_heterogeneous_nucleation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwhen ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Riming,s-1,,,tnsclwri ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_riming,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwri ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Accretion to Rain,s-1,,,tnsclwar ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_accretion_to_rain,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwar ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Accretion to Snow,s-1,,,tnsclwas ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_accretion_to_snow,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwas ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Melting From Cloud Ice,s-1,,,tnsclwmi ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_melting_from_cloud_ice,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwmi ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Autoconversion,s-1,,,tnsclwac ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_autoconversion,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwac ,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Liquid Water due to Advection,s-1,,,tnsclwa ,tendency_of_mass_fraction_of_stratiform_cloud_liquid_water_in_air_due_to_advection,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclwa ,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice Due Convective Detrainment,s-1,Tendency of Mass Fraction of Stratiform Cloud Ice Due to Convective Detrainment,,tnsclicd,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_convective_detrainment,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclicd,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Homogeneous Nucleation,s-1,,,tnsclihon,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_homogeneous_nucleation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclihon,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Heterogeneous Nucleation From Cloud Liquid,s-1,,,tnsclihencl,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_heterogeneous_nucleation_from_cloud_liquid_water,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclihencl,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Heterogeneous Nucleation From Water Vapor,s-1,,,tnsclihenv,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_heterogeneous_nucleation_from_water_vapor,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclihenv,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Riming From Cloud Liquid,s-1,,,tnscliricl,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_riming_from_cloud_liquid_water,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnscliricl,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Riming From Rain,s-1,,,tnsclirir,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_riming_from_rain,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclirir,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Deposition and Sublimation,s-1,,,tnsclids,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_deposition_and_sublimation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclids,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Aggregation,s-1,,,tnscliag,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_aggregation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnscliag,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Accretion to Snow,s-1,,,tnsclias,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_accretion_to_snow,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclias,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Evaporation of Melting Ice,s-1,,,tnscliemi,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_evaporation_of_melting_ice,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnscliemi,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Melting to Rain,s-1,,,tnsclimr,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_melting_to_rain,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclimr,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Melting to Cloud Liquid,s-1,,,tnsclimcl,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_melting_to_cloud_liquid_water,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclimcl,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Icefall,s-1,,,tnscliif,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_icefall,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnscliif,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Ice due to Advection,s-1,,,tnsclia,tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_advection,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsclia,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+2,Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Condensation and Evaporation,s-1,condensed water includes both liquid and ice.,,tnsccwce,tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_condensation_and_evaporation,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsccwce,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Autoconversion to Rain,s-1,condensed water includes both liquid and ice.,,tnsccwacr,tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_autoconversion_to_rain,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsccwacr,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Autoconversion to Snow,s-1,condensed water includes both liquid and ice.,,tnsccwacs,tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_autoconversion_to_snow,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsccwacs,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Icefall,s-1,condensed water includes both liquid and ice.,,tnsccwif,tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_icefall,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsccwif,atmos,,area: areacella,,
+2,Tendency of Mass Fraction of Stratiform Cloud Condensed Water due to Advection,s-1,condensed water includes both liquid and ice.,,tnsccwa,tendency_of_mass_fraction_of_stratiform_cloud_condensed_water_in_air_due_to_advection,,s-1,time: mean,,,,,,real,longitude latitude alevel time,tnsccwa,atmos,,area: areacella,,
+"In CMOR Table cfMon: ""CFMIP monthly 4xCO2 2D"" -- monthly mean 2D TOA radiative fluxes  calculated by instantaneously quadrupling CO2. ",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,TOA Outgoing Shortwave Radiation in 4XCO2 Atmosphere,W m-2,,,rsut4co2,toa_outgoing_shortwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsut4co2,atmos,,area: areacella,,
+1,TOA Outgoing Longwave Radiation 4XCO2 Atmosphere,W m-2,,,rlut4co2,toa_outgoing_longwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlut4co2,atmos,,area: areacella,,
+1,TOA Outgoing Clear-Sky Shortwave Radiation 4XCO2 Atmosphere,W m-2,,,rsutcs4co2,toa_outgoing_shortwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsutcs4co2,atmos,,area: areacella,,
+1,TOA Outgoing Clear-Sky Longwave Radiation 4XCO2 Atmosphere,W m-2,,,rlutcs4co2,toa_outgoing_longwave_flux_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlutcs4co2,atmos,,area: areacella,,
+"In CMOR Table cfMon: ""CFMIP monthly 4xCO2 3D"" -- monthly mean 3-D radiative fluxes  calculated by instantaneously quadrupling CO2. On model half levels, including the surface and the Top of the Atmosphere.",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Upwelling Longwave Radiation 4XCO2 Atmosphere,W m-2,,,rlu4co2,upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rlu4co2,atmos,,area: areacella,,
+1,Upwelling Shortwave Radiation 4XCO2 Atmosphere,W m-2,,,rsu4co2,upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rsu4co2,atmos,,area: areacella,,
+1,Downwelling Longwave Radiation 4XCO2 Atmosphere,W m-2,,,rld4co2,downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rld4co2,atmos,,area: areacella,,
+1,Downwelling Shortwave Radiation 4XCO2 Atmosphere,W m-2,,,rsd4co2,downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rsd4co2,atmos,,area: areacella,,
+1,Upwelling Clear-Sky Longwave Radiation 4XCO2 Atmosphere,W m-2,,,rlucs4co2,upwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rlucs4co2,atmos,,area: areacella,,
+1,Upwelling Clear-Sky Shortwave Radiation 4XCO2 Atmosphere,W m-2,,,rsucs4co2,upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,up,real,longitude latitude alevhalf time,rsucs4co2,atmos,,area: areacella,,
+1,Downwelling Clear-Sky Longwave Radiation 4XCO2 Atmosphere,W m-2,,,rldcs4co2,downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rldcs4co2,atmos,,area: areacella,,
+1,Downwelling Clear-Sky Shortwave Radiation 4XCO2 Atmosphere,W m-2,,,rsdcs4co2,downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: mean,,,,,down,real,longitude latitude alevhalf time,rsdcs4co2,atmos,,area: areacella,,
+"In CMOR Table cfMon: ""CFMIP monthly inline"" -- monthly mean in line ISCCP and CALIPSO/PARASOL simulator output ",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,ISCCP Total Cloud Fraction,%,,,cltisccp,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,cltisccp,atmos,,area: areacella,,
+1,ISCCP Mean Cloud Albedo,1,"When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README",,albisccp,cloud_albedo,,1,time: mean,,,,,,real,longitude latitude time,albisccp,atmos,,area: areacella,,
+1,ISCCP Mean Cloud Top Pressure,Pa ,"When computing time-means, weight by the ISCCP Total Cloud Fraction - see  http://www.cfmip.net/README",,ctpisccp,air_pressure_at_cloud_top,,Pa ,time: mean,,,,,,real,longitude latitude time,ctpisccp,atmos,,area: areacella,,
+1,ISCCP Cloud Area Fraction,%, 7 levels x 7 tau,,clisccp,isccp_cloud_area_fraction,,%,time: mean,,,,,,real,"longitude latitude plev7, tau, time",clisccp,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,area: areacella,,
+1,CALIPSO Total Cloud Fraction,%,,,cltcalipso,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,cltcalipso,atmos,,area: areacella,,
+1,CALIPSO Low Level Cloud Fraction ,%,,,cllcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time p840,cllcalipso,atmos,,area: areacella,,
+1,CALIPSO Mid Level Cloud Fraction ,%,,,clmcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time p560,clmcalipso,atmos,,area: areacella,,
+1,CALIPSO High Level Cloud Fraction ,%,,,clhcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time p220,clhcalipso,atmos,,area: areacella,,
+1,CALIPSO Cloud Fraction ,%, 40 height levels,,clcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alt40 time,clcalipso,atmos,,area: areacella,,
+1,PARASOL Reflectance ,1, 5 bins of solar zenith angle.  This is reflectance as seen at the top of the atmosphere.,,parasolRefl,toa_bidirectional_reflectance,,1,time: mean,,,,,,real,longitude latitude sza5 time,parasolRefl,atmos,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/cfOff.csv b/Tables_csv/cfOff.csv
new file mode 100644
index 0000000..3e9bf7d
--- /dev/null
+++ b/Tables_csv/cfOff.csv
@@ -0,0 +1,21 @@
+"CMOR Table cfOff: ""CFMIP monthly offline"" Cloud Diagnostic Fields",,,,,cfOff,mon,,,,,,,,,,,,,,,,
+(All Saved on the Atmospheric Grid),,,,,,,,,,,,,,,,,,,,,,
+"For further guidance, please see http://www.cfmip.net",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+"The spread sheet ""CFMIP output"" specifies the simulations and time-periods for which the cloud diagnostic fields listed on this spread sheet should be saved.",,,,,,,,,,,,,,,,,,,,,,
+"CMOR Table cfOff: ""CFMIP monthly offline"" -- monthly mean CloudSat/CALIPSO/PARASOL simulator output",,,,,,,,,,,,,,,,,,,,,,
+"(Calculate monthly means by averaging the orbital curtain output from CFMIP_orbital_offline.  The difference between similar variables appearing in this and the previous table is in the spatial sampling and time period requested. The previous table builds monthly means from global fields, whereas this table below uses only data along the satellite track for a short period of time (one year). This will enable studies of the impact of the satellite sampling in the comparisons.)",,,,,,,,,, [...]
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,CALIPSO Cloud Fraction,%,(40 height levels),,  clcalipso ,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alt40 time,  clcalipso ,atmos,,area: areacella,,
+1,CALIPSO Cloud Fraction Undetected by CloudSat,%,(40 height levels)  Clouds detected by CALIPSO but below the detectability threshold of CloudSat,,clcalipso2  ,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude alt40 time,clcalipso2  ,atmos,,area: areacella,,
+1,CloudSat Radar Reflectivity,1,CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .,, cfadDbze94,histogram_of_equivalent_reflectivity_factor_over_height_above_reference_ellipsoid,,1,time: mean,,,,,,real,longitude latitude alt40 dbze time, cfadDbze94,atmos,,area: areacella,,
+1,CALIPSO Scattering Ratio,1,CFADs (Cloud Frequency Altitude Diagrams) are joint height - radar reflectivity (or lidar scattering ratio) distributions  (40 levelsx15 bins) .,,cfadLidarsr532,histogram_of_backscattering_ratio_over_height_above_reference_ellipsoid,,1,time: mean,,,,,,real,longitude latitude alt40 scatratio time,cfadLidarsr532,atmos,,area: areacella,,
+1,PARASOL Reflectance,1,Simulated reflectance from PARASOL as seen at the top of the atmosphere for 5 solar zenith angles. Valid only over ocean and for one viewing direction (viewing zenith angle of 30 degrees and relative azimuth angle 320 degrees).,,parasolRefl,toa_bidirectional_reflectance,,1,time: mean,,,,,,real,longitude latitude sza5 time,parasolRefl,atmos,,area: areacella,,
+1,CALIPSO Total Cloud Fraction ,%,,,cltcalipso,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,cltcalipso,atmos,,area: areacella,,
+1,CALIPSO Low Level Cloud Fraction ,%,,,cllcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time p840,cllcalipso,atmos,,area: areacella,,
+1,CALIPSO Mid Level Cloud Fraction ,%,,,clmcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time p560,clmcalipso,atmos,,area: areacella,,
+1,CALIPSO High Level Cloud Fraction ,%,,,clhcalipso,cloud_area_fraction_in_atmosphere_layer,,%,time: mean,,,,,,real,longitude latitude time p220,clhcalipso,atmos,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/cfsites.csv b/Tables_csv/cfsites.csv
new file mode 100644
index 0000000..bf53aae
--- /dev/null
+++ b/Tables_csv/cfsites.csv
@@ -0,0 +1,46 @@
+CMOR Table cfSites: CFMIP high frequency Cloud Diagnostic Fields,,,,,cfSites,subhr,,,,,,,,,,,,,,,,
+(sampled only at specified locations),,,,,,,,,,,,,,,,,,,,,,
+"For further guidance, please see http://www.cfmip.net",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+"The spread sheet ""CFMIP output"" specifies the simulations and time-periods for which the cloud diagnostic fields listed on this spread sheet should be saved.",,,,,,,,,,,,,,,,,,,,,,
+"CMOR Table cfSites: ""CFMIP Timestep Station Data"" -- 2-D fields from the Amon table and 3-D fields on model levels sampled at 20 to 30 minute intervals at 118 specified locations (see http://cfmip.metoffice.com/cfmip2/pointlocations.txt)",,,,,,,,,,,,,,,,,,,,,,
+"The sampling interval should be the integer multiple of the model time-step that is nearest to 30 minutes and divides into 60 minutes with no remainder. e.g. (30->30,20->20,15->30,10->30).   Outputs should be instantaneous (not time mean) and from nearest gridbox (no spatial interpolation.) Note that except for the quantities appearing in the Amon spreadsheet (first line of table below), all other fields are 3-D.",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,(use names from Amon 2D table),,"This table includes the 2-D variables listed in the ""Amon"" spreadsheet, omitting, however, the daily maximum and minimum temperatures.  All variables should be reported as synoptic fields, not daily means.  ",,include Amon 2D,,,,time: point,,,,,,real,site time1,,atmos,,,,
+1,Cloud Area Fraction,%,Include both large-scale and convective cloud.,,cl,cloud_area_fraction_in_atmosphere_layer,,%,time: point,,,,,,real,alevel site time1,cl,atmos,,,,
+1,Mass Fraction of Cloud Liquid Water,1,Include both large-scale and convective cloud.  Calculate as the mass of  cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,clw,mass_fraction_of_cloud_liquid_water_in_air,,1,time: point,,,,,,real,alevel site time1,clw,atmos,,,,
+1,Mass Fraction of Cloud Ice,1,Include both large-scale and convective cloud. Calculate as the mass of  cloud ice  in the grid cell divided by the mass of air (including the water in all phases) in the grid cell.  Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  ,,cli,mass_fraction_of_cloud_ice_in_air,,1,time: point,,,,,,real,alevel site time1,cli,atmos,,,,
+1,Convective Mass Flux,kg m-2 s-1,"Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  Calculate as the convective mass flux divided by the area of the whole grid cell (not just the area of the updrafts).",,mc,atmosphere_net_upward_convective_mass_flux,,kg m-2 s-1,time: point,,,,,up,real,alevhalf site time1,mc,atmos,,,,
+1,Air Temperature,K,,,ta,air_temperature,,K,time: point,,,,,,real,alevel site time1,ta,atmos,,,,
+1,Eastward Wind,m s-1,,,ua,eastward_wind,,m s-1,time: point,,,,,,real,alevel site time1,ua,atmos,,,,
+1,Northward Wind,m s-1,,,va,northward_wind,,m s-1,time: point,,,,,,real,alevel site time1,va,atmos,,,,
+1,Specific Humidity,1,,,hus,specific_humidity,,1,time: point,,,,,,real,alevel site time1,hus,atmos,,,,
+1,Relative Humidity,%,"This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hur,relative_humidity,,%,time: point,,,,,,real,alevel site time1,hur,atmos,,,,
+1,omega (=dp/dt),Pa s-1,"commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)",,wap,lagrangian_tendency_of_air_pressure,,Pa s-1,time: point,,,,,,real,alevel site time1,wap,atmos,,,,
+1,Geopotential Height,m,,,zg,geopotential_height,,m,time: point,,,,,,real,alevel site time1,zg,atmos,,,,
+1,Upwelling Longwave Radiation,W m-2,,,rlu,upwelling_longwave_flux_in_air,,W m-2,time: point,,,,,up,real,alevel site time1,rlu,atmos,,,,
+1,Upwelling Shortwave Radiation,W m-2,,,rsu,upwelling_shortwave_flux_in_air,,W m-2,time: point,,,,,up,real,alevel site time1,rsu,atmos,,,,
+1,Downwelling Longwave Radiation,W m-2,,,rld,downwelling_longwave_flux_in_air,,W m-2,time: point,,,,,down,real,alevel site time1,rld,atmos,,,,
+1,Downwelling Shortwave Radiation,W m-2,,,rsd,downwelling_shortwave_flux_in_air,,W m-2,time: point,,,,,down,real,alevel site time1,rsd,atmos,,,,
+1,Upwelling Clear-Sky Longwave Radiation,W m-2,,,rlucs,upwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,up,real,alevel site time1,rlucs,atmos,,,,
+1,Upwelling Clear-Sky Shortwave Radiation,W m-2,,,rsucs,upwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,up,real,alevel site time1,rsucs,atmos,,,,
+1,Downwelling Clear-Sky Longwave Radiation,W m-2,,,rldcs,downwelling_longwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,down,real,alevel site time1,rldcs,atmos,,,,
+1,Downwelling Clear-Sky Shortwave Radiation,W m-2,,,rsdcs,downwelling_shortwave_flux_in_air_assuming_clear_sky,,W m-2,time: point,,,,,down,real,alevel site time1,rsdcs,atmos,,,,
+1,Tendency of Air Temperature,K s-1,,,tnt ,tendency_of_air_temperature,,K s-1,time: point,,,,,,real,alevel site time1,tnt ,atmos,,,,
+1,Tendency of Air Temperature due to Advection,K s-1,,,tnta ,tendency_of_air_temperature_due_to_advection,,K s-1,time: point,,,,,,real,alevel site time1,tnta ,atmos,,,,
+1,Tendency of Air Temperature due to Diabatic Processes,K s-1,,,tntmp,tendency_of_air_temperature_due_to_model_physics,,K s-1,time: point,,,,,,real,alevel site time1,tntmp,atmos,,,,
+1,Tendency of Air Temperature due to Stratiform Cloud Condensation and Evaporation,K s-1,,,tntscpbl ,tendency_of_air_temperature_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing,,K s-1,time: point,,,,,,real,alevel site time1,tntscpbl ,atmos,,,,
+1,Tendency of Air Temperature due to Radiative Heating,K s-1,,,tntr ,tendency_of_air_temperature_due_to_radiative_heating,,K s-1,time: point,,,,,,real,alevel site time1,tntr ,atmos,,,,
+1,Tendency of Air Temperature due to Moist Convection,K s-1,,,tntc,tendency_of_air_temperature_due_to_convection,,K s-1,time: point,,,,,,real,alevel site time1,tntc,atmos,,,,
+1,Tendency of Specific Humidity,s-1,,,tnhus,tendency_of_specific_humidity,,s-1,time: point,,,,,,real,alevel site time1,tnhus,atmos,,,,
+1,Tendency of Specific Humidity due to Advection,s-1,,,tnhusa ,tendency_of_specific_humidity_due_to_advection,,s-1,time: point,,,,,,real,alevel site time1,tnhusa ,atmos,,,,
+1,Tendency of Specific Humidity due to Convection,s-1,,,tnhusc ,tendency_of_specific_humidity_due_to_convection,,s-1,time: point,,,,,,real,alevel site time1,tnhusc ,atmos,,,,
+1,Tendency of Specific Humidity due to Diffusion,s-1,,,tnhusd ,tendency_of_specific_humidity_due_to_diffusion,,s-1,time: point,,,,,,real,alevel site time1,tnhusd ,atmos,,,,
+1,Tendency of Specific Humidity due to Stratiform Cloud Condensation and Evaporation,s-1,,,tnhusscpbl ,tendency_of_specific_humidity_due_to_stratiform_cloud_and_precipitation_and_boundary_layer_mixing,,s-1,time: point,,,,,,real,alevel site time1,tnhusscpbl ,atmos,,,,
+1,Tendency of Specific Humidity due to Model Physics,s-1,,,tnhusmp ,tendency_of_specific_humidity_due_to_model_physics,,s-1,time: point,,,,,,real,alevel site time1,tnhusmp ,atmos,,,,
+1,Eddy Viscosity Coefficient for Momentum Variables,m2 s-1,,,evu,atmosphere_momentum_diffusivity,,m2 s-1,time: point,,,,,,real,alevel site time1,evu,atmos,,,,
+1,Eddy Diffusivity Coefficient for Temperature Variable,m2 s-1,,,edt,atmosphere_heat_diffusivity,,m2 s-1,time: point,,,,,,real,alevel site time1,edt,atmos,,,,
\ No newline at end of file
diff --git a/Tables_csv/da.csv b/Tables_csv/da.csv
new file mode 100644
index 0000000..bc296c6
--- /dev/null
+++ b/Tables_csv/da.csv
@@ -0,0 +1,66 @@
+"CMOR Table day: Daily Mean Atmosphere, Ocean and Surface Fields",,,,,day,day,,,,,,,,,,,,,,,,
+"(saved on the model's atmospheric or ocean grid, as appropriate)",,,,,,,,,,,,,,,,,,,,,,
+In CMOR Table day: 2-D daily mean atmospheric and surface fields,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+The following daily mean variables should be collected for all simulations (for each ensemble member and the full duration of each experiment).,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Near-Surface Specific Humidity,1,"near-surface (usually, 2 meter) specific humidity.",,huss,specific_humidity,,1,time: mean,,,,,,real,longitude latitude time height2m,huss,atmos,,area: areacella,,
+1,Daily Minimum Near-Surface Air Temperature,K,"daily-minimum near-surface (usually, 2 meter) air temperature.  ",,tasmin,air_temperature,,K,time: minimum,,,,,,real,longitude latitude time height2m,tasmin,atmos,,area: areacella,,
+1,Daily Maximum Near-Surface Air Temperature,K,"daily-maximum near-surface (usually, 2 meter) air temperature.",,tasmax,air_temperature,,K,time: maximum,,,,,,real,longitude latitude time height2m,tasmax,atmos,,area: areacella,,
+1,Near-Surface Air Temperature,K,"daily-mean near-surface (usually, 2 meter) air temperature.",,tas,air_temperature,,K,time: mean,,,,,,real,longitude latitude time height2m,tas,atmos,,area: areacella,,
+1,Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective),,pr,precipitation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,pr,atmos,,area: areacella,,
+1,Sea Level Pressure,Pa,,,psl,air_pressure_at_sea_level,,Pa,time: mean,,,,,,real,longitude latitude time,psl,atmos,,area: areacella,,
+1,Daily-Mean Wind Speed,m s-1,"near-surface (usually, 10 meters) wind speed.",,sfcWind,wind_speed,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,sfcWind,atmos,,area: areacella,,
+1,Square of Sea Surface Temperature,K2,"square of temperature of liquid ocean, averaged over the day. Report on the ocean grid.  This variable appears in WGOMD Table 2.2 ",,tossq,square_of_sea_surface_temperature,,K2,time:mean,,,,,,real,longitude latitude time,tossq,ocean,,area: areacella,,
+1,Sea Surface Temperature,K,temperature of liquid ocean. Report on the ocean grid.  This variable appears in WGOMD Table 2.2 ,,tos,surface_temperature,,K,time: mean,,,,,,real,longitude latitude time,tos,ocean,,area: areacella,,
+1,Daily Maximum Ocean Mixed Layer Thickness De_ned by Mixing Scheme ,m ,This variable appears in WGOMD Table 2.2 ,,omldamax,ocean_mixed_layer_thickness_defined_by_mixing_scheme,,m ,time: maximum,,,,,,real,longitude latitude time,omldamax,ocean,,area: areacella,,
+The rest of the daily mean fields on this spreadsheet should be collected only for a single ensemble member of the following experiments.,,,,,,,,,,,,,,,,,,,,,,
+,,,experiment,time-period requested,,,,,,,,,,,,,,,,,,
+,,,pre-industrial controls,"20 years, preferably corresponding to years 1986-2005 of the historical run",,,,,,,,,,,,,,,,,,
+,,,historical,Jan 1950 -- Dec 2005,,,,,,,,,,,,,,,,,,
+,,,future simulations driven by RCP concentrations or emissions,"only years 2006-2100, 2181-2200, and 2281-2300",,,,,,,,,,,,,,,,,,
+,,,AMIP,all years,,,,,,,,,,,,,,,,,,
+CMOR Table day: 2-D daily-mean atmospheric and surface fields ,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Moisture in Upper 0.1 m of Soil Column,kg m-2,Compute the mass of water in all phases in the upper 0.1 meters of soil.,,mrsos,moisture_content_of_soil_layer,,kg m-2,time: mean,,,,,,real,longitude latitude time,mrsos,atmos,,area: areacella,,
+1,Near-Surface Relative Humidity,%,"near-surface (usually, 2 meter) relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,rhs,relative_humidity,,%,time: mean,,,,,,real,longitude latitude time height2m,rhs,atmos,,area: areacella,,
+1,Surface Daily Minimum Relative Humidity,%,"near-surface (usually, 2 meter) minimum  relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,rhsmin,relative_humidity,,%,time: minimum,,,,,,real,longitude latitude time height2m,rhsmin,atmos,,area: areacella,,
+1,Surface Daily Maximum Relative Humidity,%,"near-surface (usually, 2 meter) maximum  relative humidity.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,rhsmax,relative_humidity,,%,time: maximum,,,,,,real,longitude latitude time height2m,rhsmax,atmos,,area: areacella,,
+1,Snow Area Fraction,%,,,snc,surface_snow_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,snc,atmos,,area: areacella,,
+1,Total Cloud Fraction,%,"for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.",,clt,cloud_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,clt,atmos,,area: areacella,,
+1, Surface Temperature Where Land or Sea Ice,K,"""skin"" temperature of all surfaces except open ocean.  ",,tslsi,surface_temperature,,K,time: mean,,,,,,real,longitude latitude time,tslsi,land,,area: areacella,,
+1,Surface Snow Amount,kg m-2,Compute as the mass of surface snow on the land portion of the grid cell divided by the land area in the grid cell; report 0.0 where the land fraction is 0; exclude snow on vegetation canopy or on sea ice.,,snw,surface_snow_amount,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,snw,land,,area: areacella,,
+1,Convective Precipitation,kg m-2 s-1,at surface; includes both liquid and solid phases.,,prc,convective_precipitation_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,prc,atmos,,area: areacella,,
+1,Solid Precipitation,kg m-2 s-1,at surface; includes precipitation of all forms of water in the solid phase,,prsn,snowfall_flux,,kg m-2 s-1,time: mean,,,,,,real,longitude latitude time,prsn,atmos,,area: areacella,,
+1,Total Runoff,kg m-2 s-1,"compute as the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell divided by the land area in the grid cell.",,mrro,runoff_flux,,kg m-2 s-1,time: mean area: mean where land ,,,,,,real,longitude latitude time,mrro,land,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Eastward Wind,m s-1,"near-surface (usually, 10 meters) eastward component of wind.",,uas,eastward_wind,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,uas,atmos,,area: areacella,,
+1,Northward Wind,m s-1,"near-surface (usually, 10 meters) northward component of wind.  ",,vas,northward_wind,,m s-1,time: mean,,,,,,real,longitude latitude time height10m,vas,atmos,,area: areacella,,
+1,Daily Maximum Wind Speed,m s-1,"near-surface (usually, 10 meters) wind speed.  ",,sfcWindmax,wind_speed,,m s-1,time: maximum,,,,,,real,longitude latitude time height10m,sfcWindmax,atmos,,area: areacella,,
+1,Surface Upward Latent Heat Flux,W m-2,,,hfls,surface_upward_latent_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfls,atmos,,area: areacella,,
+1,Surface Upward Sensible Heat Flux,W m-2,,,hfss,surface_upward_sensible_heat_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,hfss,atmos,,area: areacella,,
+1,Surface Downwelling Longwave Radiation,W m-2,,,rlds,surface_downwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rlds,atmos,,area: areacella,,
+1,Surface Upwelling Longwave Radiation,W m-2,,,rlus,surface_upwelling_longwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlus,atmos,,area: areacella,,
+1,Surface Downwelling Shortwave Radiation,W m-2,,,rsds,surface_downwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,down,real,longitude latitude time,rsds,atmos,,area: areacella,,
+1,Surface Upwelling Shortwave Radiation,W m-2,,,rsus,surface_upwelling_shortwave_flux_in_air,,W m-2,time: mean,,,,,up,real,longitude latitude time,rsus,atmos,,area: areacella,,
+1,TOA Outgoing Longwave Radiation,W m-2,at the top of the atmosphere.,,rlut,toa_outgoing_longwave_flux,,W m-2,time: mean,,,,,up,real,longitude latitude time,rlut,atmos,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,,,
+1,Eastward Sea Ice Velocity,m s-1,"Report on ocean's grid.  Report as ""missing"" in regions free of sea ice.",,usi,eastward_sea_ice_velocity,,m s-1,time: mean,,,,,,real,longitude latitude time,usi,seaIce ocean,,area: areacella,,
+1,Northward Sea Ice Velocity,m s-1,"Report on ocean's grid.  Report as ""missing"" in regions free of sea ice.",,vsi,northward_sea_ice_velocity,,m s-1,time: mean,,,,,,real,longitude latitude time,vsi,seaIce ocean,,area: areacella,,
+1,Sea Ice Area Fraction,%,fraction of grid cell covered by sea ice. Report on ocean's grid. ,,sic,sea_ice_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,sic,seaIce ocean,,area: areacella,,
+1,Sea Ice Thickness,m,"Report on ocean's grid.  Compute the mean thickness of sea ice in the ocean portion of the grid cell (averaging over the entire ocean portion, including the ice-free fraction).  Report as 0.0 in regions free of sea ice.",,sit,sea_ice_thickness,,m,time: mean area: mean where sea ,,,,,,real,longitude latitude time,sit,seaIce ocean,,area: areacella,,
+"In CMOR Table day: daily mean 3-D atmospheric fields on the following pressure surfaces: 1000, 850, 700, 500, 250, 100, 50, and 10 hPa",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Air Temperature,K,,,ta,air_temperature,,K,time: mean,,,,,,real,longitude latitude plev8 time,ta,atmos,,area: areacella,,
+1,Relative Humidity,%,"This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.",,hur,relative_humidity,,%,time: mean,,,,,,real,longitude latitude plev8 time,hur,atmos,,area: areacella,,
+1,Specific Humidity,1,,,hus,specific_humidity,,1,time: mean,,,,,,real,longitude latitude plev8 time,hus,atmos,,area: areacella,,
+1,omega (=dp/dt),Pa s-1,"commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)",,wap,lagrangian_tendency_of_air_pressure,,Pa s-1,time: mean,,,,,,real,longitude latitude plev8 time,wap,atmos,,area: areacella,,
+1,Northward Wind,m s-1 ,,,va,northward_wind,,m s-1 ,time: mean,,,,,,real,longitude latitude plev8 time,va,atmos,,area: areacella,,
+1,Eastward Wind,m s-1 ,,,ua,eastward_wind,,m s-1 ,time: mean,,,,,,real,longitude latitude plev8 time,ua,atmos,,area: areacella,,
+2,Geopotential Height,m,,,zg,geopotential_height,,m,time: mean,,,,,,real,longitude latitude plev8 time,zg,atmos,,area: areacella,,
\ No newline at end of file
diff --git a/Tables_csv/dims.csv b/Tables_csv/dims.csv
new file mode 100644
index 0000000..398b457
--- /dev/null
+++ b/Tables_csv/dims.csv
@@ -0,0 +1,38 @@
+CMOR Dimensions,,,,,,,,,,,,,,,,,,,,
+
+CMOR table(s),CMOR dimension,output dimension name,description,standard name,long name,axis,units,index axis?,coords_attrib,bounds?,stored direction,valid_min,valid_max,type,positive,value,bounds _values,requested,bounds_ requested,tol_on_requests: variance from requested values that is tolerated
+"fx, Amon, Lmon, LImon, OImon, aero, day, 6hrLev, 6hrPlev, 3hr,  Oclim, Oyr, Omon, cfMon, cfOff, cfDay, cf3hr",longitude,lon,,longitude,longitude,X,degrees_east,,,yes,increasing,0,360,double,,,,,,
+"fx, Amon, Lmon, LImon, OImon, aero, day, 6hrLev, 6hrPlev, 3hr,  Oclim, Oyr, Omon, cfMon, cfOff, cfDay, cf3hr",latitude,lat,,latitude,latitude,Y,degrees_north,,,yes,increasing,-90,90,double,,,,,,
+Amon,plevs,plev,There are 17 mandatory levels and up to 6 additional levels requested of models with sufficient resolution in the stratosphere.,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,,,100000. 92500. 85000. 70000. 60000. 50000. 40000. 30000. 25000. 20000. 15000. 10000. 7000. 5000. 3000. 2000. 1000.,,0.001
+day,plev8,plev,,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,,,100000. 85000. 70000. 50000. 25000. 10000. 5000. 1000.,,0.001
+6hrPlev,plev3,plev,,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,,,85000. 50000. 25000. ,,0.001
+"cfMon, cfDay",plev7,plev,7 pressure layers defined by ISCCP simulator,air_pressure,pressure,Z,Pa,,,yes,decreasing,,,double,down,,,,100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.  0.,0.001
+cfDay,p500,plev,500 hPa,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,50000.,,,,
+cfDay,p700,plev,700 hPa,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,70000.,,,,
+"cfMon, cfOff, cf3hr",p220,plev,pressure layer of high-level cloud in ISCCP simulator,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,22000.,0. 44000.,,,
+"cfMon, cfOff, cf3hr",p560,plev,pressure layer of mid-level cloud in ISCCP simulator,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,56000.,44000. 68000.,,,
+"cfMon, cfOff, cf3hr",p840,plev,pressure layer of low-level cloud in ISCCP simulator,air_pressure,pressure,Z,Pa,,,no,decreasing,,,double,down,84000.,680. 100000.,,,
+"Amon, aero, 6hrLev, cfMon, cfDay, cf3hr, cfSites",alevel,lev,generic atmospheric model vertical coordinate (nondimensional or dimensional),,atmospheric model level,Z,,ok,,yes,,,,double,up,,,,,
+"Amon, cfMon, cfDay, cf3hr, cfSites",alevhalf,lev,"atmospheric model ""half"" level",,atmospheric model half-level,Z,,ok,,no,,,,double,up,,,,,
+aero,alev1,lev,atmospheric model's lowest level,,lowest atmospheric model level,Z,,ok,,yes,increasing,,,double,,,,,,
+"cfMon, cfOff, cfDay, cf3hr",alt40,alt40,CloudSat vertical coordinate heights,altitude,altitude,Z,m,,,yes,increasing,,,double,up,,,240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.,. 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4 [...]
+"fx,Oyr, Amon, Lmon, LImon, OImon, aero, day, 3hr, Omon, cfMon, cfOff, cfDay, cf3hr",time,time,for time-mean fields,time,time,T,days since ?,,,yes,increasing,,,double,,,,,,
+"6hrLev, 6hrPlev, 3hr, cf3hr, cfSites",time1,time,synoptic times (for fields that are not time-means),time,time,T,days since ?,,,no,increasing,,,double,,,,,,
+"Oclim, Amon",time2,time,climatological times,time,time,T,days since ?,,,yes,increasing,,,double,,,,,,
+"Amon, day, 3hr, cf3hr, cfSites",height2m,height,~2 m standard surface air temperature and surface humidity  height,height,height,Z,m,,,no,increasing,1,10,double,up,2.,,,,
+"Amon, day, 3hr, cf3hr, cfSites",height10m,height,~10 m standard wind speed height,height,height,Z,m,,,no,increasing,1,30,double,up,10.,,,,
+"Lmon, LImon",sdepth,depth,coordinate values for soil layers (depth),depth,depth,Z,m,,,yes,increasing,0,200,double,down,,,,,
+Lmon,sdepth1 ,depth,coordinate value for topmost 0.1 meter layer of soil,depth,depth,Z,m,,,yes,increasing,0,0.2,double,down,0.05,0.0 0.1,,,
+"cfMon, cfDay",tau,tau,isccp optical depth categories,atmosphere_optical_thickness_due_to_cloud,cloud optical thickness,,1,,,yes,increasing,,,double,,,,0.15 0.8 2.45 6.5 16.2 41.5 100.,0.0  0.3  0.3  1.3  1.3  3.6  3.6  9.4 9.4 23.0 23.0 60.0 60.0 100000.,0.001
+"cfOff, cf3hr",scatratio,scatratio,15 bins of scattering ratio for the CALIPSO simulator CFAD,backscattering_ratio,lidar backscattering ratio,,1,,,yes,increasing,,,double,,,,,0.01 1.2 3 5 7 10 15 20 25 30 40 50 60 80 999 1009,0.001
+"cfOff, cf3hr",dbze,dbze,15 bins of radar reflectivity for CloudSat simulator CFAD,equivalent_reflectivity_factor,CloudSat simulator equivalent radar reflectivity factor,,dBZ,,,yes,increasing,,,double,,,,-47.5 -42.5 -37.5 -32.5 -27.5 -22.5 -17.5 -12.5 -7.5 -2.5 2.5 7.5 12.5 17.5 22.5,-50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25,0.001
+"cfMon, cfOff, cfDay cf3hr",sza5,sza,5 solar zenith angles for PARASOL reflectances,solar_zenith_angle,solar zenith angle,,degree,,,no,increasing,,,double,,,,0. 20. 40. 60. 80.,,0.001
+cfSites,site,site,an integer assigned to each of 118 stations (standard) and 73 stations (aquaplanet),,site index,,1,ok,,no,,,,integer,,,,,,
+Omon,basin,basin,,region,ocean basin,,1,,region,no,,,,character,,,,atlantic_arctic_ocean indian_pacific_ocean global_ocean,,
+Omon,rho,rho,density?  Potential density++++? ,,density++++?,Z,?,,,yes,decreasing,,,double,down,,, ,,
+"fx, Oclim, Oyr, Omon",olevel,lev,generic ocean model vertical coordinate (nondimensional or dimensional),,ocean model level,Z,,ok,,yes,,,,double,down,,,,,
+Omon,oline,line,"opening, passage, strait, channel, etc. ",,ocean passage ,,1,,passage,no,,,,character,,,,barents_opening bering_strait canadian_archipelago denmark_strait drake_passage english_channel pacific_equatorial_undercurrent faroe_scotland_channel florida_bahamas_strait fram_strait iceland_faroe_channel indonesian_thoughflow mozambique_channel taiwan_luzon_straits windward_passage,,
+cf3hr,location,loc,COSP profile in instantaneous curtain mode,,location index,,1,ok,,no,increasing,,,integer,,,,,,
+Lmon,vegtype,type,plant functional type ,,plant functional type,,1,,type_description,no,,,,character,,,,,,
+Omon,olayer100m,depth,coordinate for 100 m ocean surface layer,depth,depth,Z,m,,,no,increasing,0,100,double,down,50.,0. 100.,,,
+Omon,depth100m,depth,coordinate value for 100 m ocean depth,depth,depth,Z,m,,,no,increasing,80,120,double,down,100.,,,,
diff --git a/Tables_csv/fx.csv b/Tables_csv/fx.csv
new file mode 100644
index 0000000..13c225e
--- /dev/null
+++ b/Tables_csv/fx.csv
@@ -0,0 +1,26 @@
+CMOR Table fx: Time-Invariant Fields,,,,,fx,fx,,,,,,,,,,,,,,,,
+on atmospheric grid,,,,,,,,,,,,,,,,,,,,,,
+"Atmospheric and land fields may be submitted on a (single) grid of the modeling group's choosing.  We expect most groups will elect to save output on the native grid.  If data is ""interpolated"" to a different grid, it is important to preserve certain global mean properties (e.g., the total surface fluxes of heat, momentum, and water mass).",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Atmosphere Grid-Cell Area,m2,,,areacella,cell_area,,m2,,500,2.50E+05,,,,real,longitude latitude,areacella,atmos land,,,,
+1,Surface Altitude,m,"height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0",,orog,surface_altitude,,m,,-700,1.00E+04,,,,real,longitude latitude,orog,atmos,,area: [...]
+1,Land Area Fraction,%,,,sftlf,land_area_fraction,,%,,0,100,,,,real,longitude latitude,sftlf,atmos,,area: areacella,,
+1,Fraction of Grid Cell Covered with Glacier,%,"fraction of grid cell occupied by ""permanent"" ice (i.e., glaciers).  If time varying, report annual values for each year of simulation",,sftgif,land_ice_area_fraction,,%,,0,100,,,,real,longitude latitude,sftgif,land,,area: areacella,,
+1,Capacity of Soil to Store Water,kg m-2,"""where land"": divide the total water holding capacity of all the soil in the grid cell by the land area in the grid cell;  report as ""missing"" where the land fraction is 0.",,mrsofc,soil_moisture_content_at_field_capacity,,kg m-2,,,,,,,real,longitude latitude,mrsofc,land,,area: areacella,,
+1,Maximum Root Depth,m,"report the maximum soil depth reachable by plant roots (if defined in model), i.e., the maximum soil depth from which they can extract moisture; report as ""missing"" where the land fraction is 0.",,rootd,root_depth,,m,,0,30,,,,real,longitude latitude,rootd,land,,area: areacella,,
+on ocean grid ,,,,,,,,,,,,,,,,,,,,,,
+"The WGOMD has recommended that all ocean fields be saved on the model's native ocean grid.  Many groups will also elect to save the sea ice fields on the ocean grid.  (The alternative is to save sea ice fields on the atmosphere grid.)  If data is ""interpolated"" from its native grid, it is important to preserve certain global mean properties (e.g., the total surface fluxes of heat, momentum, and water mass into the ocean).",,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Sea Floor Depth,m,Ocean bathymetry.   Report here the sea floor depth for present day.  Report as missing for land grid cells.,,deptho,sea_floor_depth_below_geoid,,m,,0,10000,2000,5000,,real,longitude latitude,deptho,ocean,,area: areacello,,
+1,Ocean Grid-Cell Area,m2,,,areacello,cell_area,,m2,,10,2.50E+05,,,,real,longitude latitude,areacello,ocean,,,,
+1,Sea Area Fraction,%,"Report on the same grid that ocean fields are reported (i.e., the ocean native grid, or the grid that ocean data has been provided to CMIP.  For completeness, provide this even if the ocean grid is the same as the atmospheric grid. This is the area fraction at the ocean surface.",Should this be recorded as a function of depth?,sftof,sea_area_fraction,,%,,0,100,,,,real,longitude latitude,sftof,ocean,,area: areacello,,
+1,Region Selection Index,1,"Report on the same grid as the temperature field.  flag_values=0,1,2,3,4,5,6,7,8,9,10 corresponding to flag_meanings=global_land, southern_ocean, atlantic_ocean, pacific_ocean, arctic_ocean, indian_ocean, mediterranean_sea, black_sea, hudson_bay, baltic_sea, red_sea.  Report on the grid used for the temperature field.",,basin,region,,1,,1,10,,,,integer,longitude latitude,basin,ocean,,area: areacello,0 1 2 3 4 5 6 7 8 9 10,global_land southern_ocean atlantic_oc [...]
+1,Region Selection Index,1,"Report on the same grid as the ocean flag_values=0,1,2,3,4,5,6,7,8,9,10 corresponding to flag_meanings=global_land, southern_ocean, atlantic_ocean, pacific_ocean, arctic_ocean, indian_ocean, mediterranean_sea, black_sea, hudson_bay, baltic_sea, red_sea.   Report on the grid used for the meridional overturning stream function.",,basinv,region,,1,,1,10,,,,integer,longitude latitude,basinv,ocean,,,0 1 2 3 4 5 6 7 8 9 10,global_land southern_ocean atlantic_ocean p [...]
diff --git a/Tables_csv/llmon.csv b/Tables_csv/llmon.csv
new file mode 100644
index 0000000..a18a10e
--- /dev/null
+++ b/Tables_csv/llmon.csv
@@ -0,0 +1,29 @@
+CMOR Table LImon: Monthly Mean Land Cryosphere Fields,,,,,LImon,mon,,,,,,,,,,,,,,,,
+"(All fields should be saved on the atmospheric grid; unless otherwise indicated, values are averaged over only the land portion of each grid cell and report 0.0 where land fraction is 0.)",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Snow Area Fraction,%,Fraction of each grid cell that is occupied by snow that rests on land portion of cell.,,snc,surface_snow_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,snc,landIce land,,area: areacella,,
+1,Surface Snow Amount,kg m-2,Compute as the mass of surface snow on the land portion of the grid cell divided by the land area in the grid cell; report as 0.0 where the land fraction is 0; exclude snow on vegetation canopy or on sea ice.,,snw,surface_snow_amount,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,snw,landIce land,,area: areacella,,
+1,Snow Depth,m,"where land over land.  Compute the mean thickness of snow in the land portion of the grid cell (averaging over the entire land portion, including the snow-free fraction.  Report as 0.0 where the land fraction is 0.",,snd,surface_snow_thickness,,m,time: mean area: mean where land,,,,,,real,longitude latitude time,snd,landIce land,,area: areacella,,
+2,Liquid Water Content of Snow Layer,kg m-2,where land over land: compute the total mass of liquid water contained interstitially within the snow layer of the land portion of a grid cell divided by the area of the land portion of the cell.,,lwsnl,liquid_water_content_of_snow_layer,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,lwsnl,landIce land,,area: areacella,,
+1,Soil Frozen Water Content,kg m-2,"summed over all soil layers, where land over land: compute by dividing the total mass of frozen water contained in the soil layer of the grid cell by the land area in the grid cell; report as 0.0 where the land fraction is 0.",,mrfso,soil_frozen_water_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,mrfso,landIce land,,area: areacella,,
+2,Soil Moisture Content,kg m-2,"summed over all soil layers, where land over land: compute by dividing the total mass of water (both liquid and ice) contained in the soil layer of the grid cell by the land area in the grid cell; report as 0.0 where the land fraction is 0.",,mfrso,soil_moisture_content,,kg m-2,time: mean,,,,,,real,longitude latitude time,mfrso,landIce land,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,area: areacella,,
+2,Snow Soot Content,kg m-2,"Consider the entire land portion of the grid cell, with snow soot content set to 0.0 in regions free of snow.",,sootsn,snow_soot_content,snow_soot_content,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,sootsn,landIce land,,area: areacella,,
+1,Snow Age,day,"When computing the time-mean here, the time samples, weighted by the mass of snow on the land portion of the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing in regions free of snow on land.",,agesno,,surface_snow_age,day,time: mean area: mean where land,,,,,,real,longitude latitude time,agesno,landIce land,,area: areacella,,
+1,Snow Internal Temperature,K,"This temperature is averaged over all the snow in the grid cell that rests on land or land ice.  When computing the time-mean here, the time samples, the weighted by the mass of snow on the land portion of the grid cell, are accumulated and then divided by the sum of the weights.   Report as ""missing in regions free of snow on land.",,tsn,snow_temperature,,K,time: mean area: mean where land,,,,,,real,longitude latitude time,tsn,landIce land,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,area: areacella,,
+1,Surface Snow Melt,kg m-2 s-1,Compute as the total surface melt water on the land portion of the grid cell divided by the land area in the grid cell; report as 0.0 for snow-free land regions; report as 0.0 where the land fraction is 0.,,snm,surface_snow_melt_flux,,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,snm,landIce land,,area: areacella,,
+1,Surface Snow and Ice Sublimation Flux,kg m-2 s-1,The snow and ice sublimation flux is the loss of snow and ice mass resulting from their conversion to water vapor.  Compute as the total sublimation on the land portion of the grid cell divided by the land area in the grid cell; report as 0.0 for snow-free land regions; report as 0.0 where the land fraction is 0.,,sbl,surface_snow_and_ice_sublimation_flux,,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,sbl, [...]
+1,Downward Heat Flux into Snow Where Land over Land,W m-2,Compute the net downward heat flux from the atmosphere into the snow that lies on land divided by the land area in the grid cell; report as 0.0 for snow-free land regions or where the land fraction is 0.,,hfdsn,,surface_downward_heat_flux_in_snow,W m-2,time: mean area: mean where land,,,,,down,real,longitude latitude time,hfdsn,landIce land,,area: areacella,,
+3,Permafrost Layer Thickness,m,where land over land. Compute the mean thickness of the permafrost layer in the land portion of the grid cell.  Report as 0.0 in permafrost-free regions.,,tpf,,permafrost_layer_thickness,m,time: mean area: mean where land,,,,,,real,longitude latitude time,tpf,landIce land,,area: areacella,,
+3,Liquid Water Content of Permafrost Layer,kg m-2,"""where land over land"", i.e., this is the total mass of liquid water contained within the permafrost layer within the land portion of a grid cell divided by the area of the land portion of the cell.",Why do you want to know mass of liquid water?  Are you studying the seaasonal melting/freezing cycle?  Don't you care about how much frozen water is tied up as permafrost?,pflw,,liquid_water_content_of_permafrost_layer,kg m-2,time: mean ar [...]
+,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/lmon.csv b/Tables_csv/lmon.csv
new file mode 100644
index 0000000..70c75a1
--- /dev/null
+++ b/Tables_csv/lmon.csv
@@ -0,0 +1,75 @@
+"CMOR Table Lmon: Monthly Mean Land Fields, Including ",,,,,Lmon,mon,,,,,,,,,,,,,,,,
+"Physical, Vegetation, Soil, and Biogeochemical Variables",,,,,,,,,,,,,,,,,,,,,,
+"(All fields should be saved on the atmospheric grid; unless otherwise indicated, values are averaged over only the land portion of each grid cell and report 0.0 where land fraction is 0.)",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Moisture in Upper 0.1 m of Soil Column,kg m-2,Compute the mass of water in all phases in the upper 0.1 meters of soil.,,mrsos,moisture_content_of_soil_layer,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time sdepth1,mrsos,land,,area: areacella,,
+1,Total Soil Moisture Content,kg m-2,Compute the mass per unit area  (summed over all soil layers) of water in all phases.,,mrso,soil_moisture_content,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,mrso,land,,area: areacella,,
+1,Soil Frozen Water Content ,kg m-2,Compute the mass (summed over all all layers) of frozen water.,,mrlso,soil_frozen_water_content,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,mrlso,land,,area: areacella,,
+1,Surface Runoff,kg m-2 s-1,Compute the total surface runoff leaving the land portion of the grid cell.,,mrros,surface_runoff_flux,,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,mrros,land,,area: areacella,,
+1,Total Runoff,kg m-2 s-1,"compute the total runoff (including ""drainage"" through the base of the soil model) leaving the land portion of the grid cell.",,mrro,runoff_flux,,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,mrro,land,,area: areacella,,
+2,Precipitation onto Canopy,kg m-2 s-1,Report the precipitation flux that is intercepted by the vegetation canopy (if present in model) before reaching the ground.,,prveg,precipitation_flux_onto_canopy,,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,prveg,land,,area: areacella,,
+1,Evaporation from Canopy,kg m-2 s-1,Report the canopy evaporation+sublimation (if present in model).,,evspsblveg,water_evaporation_flux_from_canopy,,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,evspsblveg,land,,area: areacella,,
+,,,,,,,,,,,,,,,,,,,,area: areacella,,
+1,Water Evaporation from Soil,kg m-2 s-1,includes sublimation.  ,,evspsblsoi,water_evaporation_flux_from_soil,,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,evspsblsoi,land,,area: areacella,,
+1,Transpiration,kg m-2 s-1,,,tran,transpiration_flux,,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,tran,land,,area: areacella,,
+1, Water Content of Soil Layer,kg m-2,"in each soil layer, the mass of water in all phases, including ice.",,mrlsl,moisture_content_of_soil_layer,water_content_of_soil_layer,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude sdepth time,mrlsl,land,,area: areacella,,
+2,Temperature of Soil,K,"Temperature of each soil layer.  Report as ""missing"" for grid cells occupied entirely by ""sea"".",,tsl,soil_temperature,,K,time: mean,,,,,,real,longitude latitude sdepth time,tsl,land,,area: areacella,,
+1,Tree Cover Fraction,%,fraction of entire grid cell  that is covered by trees.  ,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",treeFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,treeFrac,land,,area: areacella,,
+1,Natural Grass Fraction,%,fraction of entire grid cell that is covered by natural grass.  ,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",grassFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,grassFrac,land,,area: areacella,,
+1,Shrub Fraction,%,fraction of entire grid cell  that is covered by shrub.,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",shrubFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,shrubFrac,land,,area: areacella,,
+1,Crop Fraction,%,fraction of entire grid cell  that is covered by crop. ,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",cropFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,cropFrac,land,,area: areacella,,
+1,Anthropogenic Pasture Fraction,%,fraction of entire grid cell  that is covered by anthropogenic pasture. ,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",pastureFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,pastureFrac,land,,area: areacella,,
+1,Bare Soil Fraction,%,fraction of entire grid cell  that is covered by bare soil.,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",baresoilFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,baresoilFrac,land,,area: areacella,,
+1,Fraction of Grid Cell that is Land but Neither Vegetation-Covered nor Bare Soil,%,"fraction of entire grid cell  that is land and is covered by ""non-vegetation"" and ""non-bare-soil"" (e.g., urban, ice, lakes, etc.) ","I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",residualFrac,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,residualFrac,land,,area: areacella,,
+1,Burnt Area Fraction,%,fraction of entire grid cell  that is covered by burnt vegetation.,"I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",burntArea,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,burntArea,land,,area: areacella,,
+,Land Carbon & Biogeochemistry,,,,,,,,,,,,,,,,,land,,area: areacella,,
+1,Carbon Mass in Vegetation,kg m-2,,,cVeg,vegetation_carbon_content,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cVeg,land,,area: areacella,,
+1,Carbon Mass in Litter Pool,kg m-2,,,cLitter,litter_carbon_content,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cLitter,land,,area: areacella,,
+1,Carbon Mass in Soil Pool,kg m-2,,,cSoil,soil_carbon_content,,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cSoil,land,,area: areacella,,
+1,Carbon Mass in Products of Land Use Change,kg m-2,,,cProduct,,PF: carbon_in_products_of_luc NOT PROPOSED,kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cProduct,land,,area: areacella,,
+1,Leaf Area Index,1,"projected leaf area per unit of ground area (i.e., only the land portion of the grid cell), expressed as a proper fraction (not a percentage)",,lai,leaf_area_index,,1,time: mean area: mean where land,,,,,,real,longitude latitude time,lai,land,,area: areacella,,
+1,Carbon Mass Flux out of Atmosphere due to Gross Primary Production on Land,kg m-2 s-1,,,gpp,gross_primary_productivity_of_carbon,gross_primary_productivity_of_carbon? gross_primary_production,kg m-2 s-1,time: mean area: mean where land,,,,,down,real,longitude latitude time,gpp,land,,area: areacella,,
+1,Carbon Mass Flux into Atmosphere due to Autotrophic (Plant) Respiration on Land,kg m-2 s-1,,,ra,plant_respiration_carbon_flux,plant_respiration_carbon_flux? autotrophic_plant_respiration,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,ra,land,,area: areacella,,
+1,Carbon Mass Flux out of Atmosphere due to Net Primary Production on Land,kg m-2 s-1,needed for models that do not compute GPP (if any),"should this be ""into Atmosphere "" rather than ""out of Atmosphere""?",npp,net_primary_productivity_of_carbon,net_primary_productivity_of_carbon?  net_primary_production,kg m-2 s-1,time: mean area: mean where land,,,,,down,real,longitude latitude time,npp,land,,area: areacella,,
+1,Carbon Mass Flux into Atmosphere due to Heterotrophic Respiration on Land,kg m-2 s-1,,,rh,heterotrophic_respiration_carbon_flux,heterotrophic_respiration_carbon_flux? heterotrophic_respiration,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,rh,land,,area: areacella,,
+1,Carbon Mass Flux into Atmosphere due to CO2 Emission from Fire,kg m-2 s-1,"CO2 emissions (expressed as a carbon mass flux) from natural fires + human ignition fires as calculated by the fire module of the DGVM, but excluding any CO2 flux from fire included in fLuc, defined below (CO2 Flux to Atmosphere from Land Use Change).",,fFire,,PF: co2_emission_from_fire NOT PROPOSED _ recommend tendency_of_atmosphere_mass_content_of_carbon_dioxide_due_to_biomass_burning for consistency with chem [...]
+1,Carbon Mass Flux into Atmosphere due to Grazing on Land,kg m-2 s-1,,,fGrazing,,PF: co2_flux_to_atmosphere_from_grazing NOT PROPOSED _ recommend tendency_of_atmosphere_mass_content_of_carbon_dioxide_due_to_grazing for consistency with chemistry names,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,fGrazing,land,,area: areacella,,
+1,Carbon Mass Flux into Atmosphere due to Crop Harvesting,kg m-2 s-1,,,fHarvest,,PF: co2_flux_to_atmosphere_from_crop_harvesting NOT PROPOSED _ recommend tendency_of_atmosphere_mass_content_of_carbon_dioxide_due_to_crop_harvesting for consistency with chemistry names,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,fHarvest,land,,area: areacella,,
+1,Net Carbon Mass Flux into Atmosphere due to Land Use Change,kg m-2 s-1,"human changes to land (excluding forest regrowth) accounting possibly for different time-scales related to fate of the wood, for example.",,fLuc,,PF: co2_flux_to_atmosphere_from_land_use_change NOT PROPOSED _ recommend tendency_of_atmosphere_mass_content_of_carbon_dioxide_due_to_land_use_change for consistency with chemistry names,kg m-2 s-1,time: mean area: mean where land,,,,,up,real,longitude latitude time,fLuc, [...]
+1,Carbon Mass Flux out of Atmosphere due to Net Biospheric Production on Land,kg m-2 s-1,"This is the net mass flux of carbon between land and atmosphere calculated as photosynthesis MINUS the sum of  plant and soil respiration, carbonfluxes  from fire, harvest, grazing  and land use change. Positive flux  is into the land.",,nbp,,PF: net_biospheric_productivity  Is this the same as net_primary_productivity_of_carbon (also in cell G53)?,kg m-2 s-1,time: mean area: mean where land,,,,,dow [...]
+1,Total Carbon Mass Flux from Vegetation to Litter,kg m-2 s-1,,,fVegLitter,litter_carbon_flux,PF: carbon_flux_from_vegetation_into_litter total_carbon_flux_from_vegetation_to_litter,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,fVegLitter,land,,area: areacella,,
+1,Total Carbon Mass Flux from Litter to Soil,kg m-2 s-1,,,fLitterSoil,,PF: carbon_flux_from_litter_into_soil total_carbon_flux_from_litter_to_soil NOT PROPOSED _ recommend carbon_flux_from_litter_into_soil for consistency with water and salt flux names,kg m-2 s-1,time: mean area: mean where land,,,,,,real,longitude latitude time,fLitterSoil,land,,area: areacella,,
+1,Total Carbon Mass Flux from Vegetation Directly to Soil,kg m-2 s-1,"In some models part of carbon (e.g., root exudate) can go directly into the soil pool without entering litter.",,fVegSoil,,PF: carbon_flux_into_soil_from_plants_excluding_litter total_carbon_flux_from_vegetation_directly_to_soil NOT PROPOSED _ recommend carbon_flux_into_soil_from_plants_excluding_litter for consistency with water and salt flux names and runoff names,kg m-2 s-1,time: mean area: mean where land,,,,,,real [...]
+2,Carbon Mass in Leaves,kg m-2,,This field and some of the following may sum to yield some of the more generic carbon pool totals given above. ,cLeaf,,"carbon_in_leaves NOT PROPOSED _ recommend leaf_carbon_content for consistency with soil_carbon_content, etc. PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cLeaf,land,,area: areacella,,
+2,Carbon Mass in Wood,kg m-2,including sapwood and hardwood.,,cWood,,"carbon_in_wood NOT PROPOSED _ recommend wood_carbon_content for consistency with soil_carbon_content, etc.  PF agrees",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cWood,land,,area: areacella,,
+2,Carbon Mass in Roots,kg m-2,including fine and coarse roots.,,cRoot,,"carbon_in_roots NOT PROPOSED _ recommend root_carbon_content for consistency with soil_carbon_content, etc.  PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cRoot,land,,area: areacella,,
+2,Carbon Mass in Other Living Compartments on Land,kg m-2,"e.g., labile, fruits, reserves, _. ",,cMisc,,"carbon_in_other_living_compartments NOT PROPOSED _ this should also be a carbon_content name, and we probably need something more specific than 'other_living_compartments' but I'm stuck for a suggestion here. PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cMisc,land,,area: areacella,,
+2,Carbon Mass in Coarse Woody Debris,kg m-2,,,cCwd,,"carbon_in_coarse_woody_debris _ NOT PROPOSED _ recommend coarse_wood_debris_carbon_content or just wood_debris_carbon_content for consistency with soil_carbon_content, etc.  PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cCwd,land,,area: areacella,,
+2,Carbon Mass in Above-Ground Litter,kg m-2,,,cLitterAbove,,"PF: aboveground_litter_carbon_content carbon_in_aboveground_litter NOT PROPOSED _ recommend surface_litter_carbon_content for consistency with soil_carbon_content, etc. and runoff names",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cLitterAbove,land,,area: areacella,,
+2,Carbon Mass in Below-Ground Litter,kg m-2,,,cLitterBelow,,"PF: belowground_litter_carbon_content carbon_in_aboveground_litter N.B. Should this be belowground litter? NOT PROPOSED _ recommend subsurface_litter_carbon_content for consistency with soil_carbon_content, etc. and runoff names",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cLitterBelow,land,,area: areacella,,
+2,Carbon Mass in Fast Soil Pool,kg m-2,"fast is meant as lifetime of less than 10 years for  reference climate conditions (20�C, no water limitations).",,cSoilFast,,"carbon_in_fast_soil_pool NOT PROPOSED _ recommend fast_soil_pool_carbon_content for consistency with soil_carbon_content, etc. PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cSoilFast,land,,area: areacella,,
+2,Carbon Mass in Medium Soil Pool,kg m-2,"medium is meant as lifetime of more than than 10 years and less than 100 years for  reference climate conditions (20�C, no water limitations)",,cSoilMedium,,"medium_soil_pool NOT PROPOSED _ recommend medium_soil_pool_carbon_content for consistency with soil_carbon_content, etc.  PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cSoilMedium,land,,area: areacella,,
+2,Carbon Mass in Slow Soil Pool,kg m-2,"fast is meant as lifetime of more than 100 years for  reference climate conditions (20�C, no water limitations)",,cSoilSlow,,"carbon_in_slow_soil_pool NOT PROPOSED _ recommend slow_soil_pool_carbon_content for consistency with soil_carbon_content, etc.  PF agrees.",kg m-2,time: mean area: mean where land,,,,,,real,longitude latitude time,cSoilSlow,land,,area: areacella,,
+2,Plant Functional Type Grid Fraction,%,"using each individual ESM PFT definition.   This includes natural PFTs, anthropogenic PFTs, bare soil, lakes, urban areas, etc.   Sum of all should equal the fraction of the grid-cell that is land.  Note that the ""types"" will be model dependent and for each type there should be a full description of the PFT (plant functional type).   To facilitate model comparison, it is also requested that the aggregated land cover types called for in lines 25  [...]
+2,Total Primary Deciduous Tree Fraction,%,"Agregation of model PFTs as defined in 1st priority to aid model intercomparison.  This is the fraction of the entire grid cell  that is covered by ""total primary deciduous trees.""    ","I think we need to add a scalar coordinate variable where some indication of ""tree"" needs to be included.  ",treeFracPrimDec,area_fraction,,%,time: mean,,,,,,real,longitude latitude time,treeFracPrimDec,land,,area: areacella,,
+2,Total Primary Evergreen Tree Cover Fraction,%,fraction of entire grid cell  that is covered by primary evergreen trees. ,,treeFracPrimEver,,total_primary_evergreen_tree_cover_fraction,%,time: mean,,,,,,real,longitude latitude time,treeFracPrimEver,land,,area: areacella,,
+2,Total Secondary Deciduous Tree Cover Fraction,%,fraction of entire grid cell  that is covered by secondary deciduous trees.,,treeFracSecDec,,total_secondary_deciduous_tree_cover_fraction,%,time: mean,,,,,,real,longitude latitude time,treeFracSecDec,land,,area: areacella,,
+2,Total Secondary Evergreen Tree Cover Fraction,%,fraction of entire grid cell  that is covered by secondary evergreen trees.,,treeFracSecEver,,total_secondary_evergreen_tree_cover_fraction,%,time: mean,,,,,,real,longitude latitude time,treeFracSecEver,land,,area: areacella,,
+2,Total C3 PFT Cover Fraction,%,"fraction of entire grid cell  that is covered by C3 PFTs (including grass, crops, and trees).",,c3PftFrac,,total_c3_pft_cover_fraction,%,time: mean,,,,,,real,longitude latitude time,c3PftFrac,land,,area: areacella,,
+2,Total C4 PFT Cover Fraction,%,fraction of entire grid cell  that is covered by C4 PFTs (including grass and crops).,,c4PftFrac,,total_c4_pft_cover_fraction,%,time: mean,,,,,,real,longitude latitude time,c4PftFrac,land,,area: areacella,,
+2,Carbon Mass Flux into Atmosphere due to Growth Autotrophic Respiration on Land,kg m-2 s-1,"This flux and the one in the following row provide a breakdown of the higher priority ""Autotrophic (Plant) Respiration"" in an earlier row of this table; thus the sum should be identical to that.",,rGrowth,,PF: for consistency with row 40: growth_autothrophic_respiration NOT PROPOSED _ recommend plant_respiration_carbon_flux_due_to_growth for consistency with row 52,kg m-2 s-1,time: mean area: m [...]
+2,Carbon Mass Flux into Atmosphere due to Maintenance Autotrophic Respiration on Land,kg m-2 s-1,"This flux and the one in the previous row provide a breakdown of the higher priority ""Autotrophic (Plant) Respiration"" in an earlier row of this table; thus the sum should be identical to that.",,rMaint,,PF: for consistency with row 40: maintenance_autothrophic_respiration NOT PROPOSED _ recommend plant_respiration_carbon_flux_due_to_maintenance for consistency with row 52 (what is 'mainte [...]
+2,Carbon Mass Flux due to NPP Allocation to Leaf,kg m-2 s-1,This is the rate of carbon uptake by leaves due to NPP,,nppLeaf,,PF: net_primary_production_allocated_into_leaves npp_allocation_to_leaf NOT PROPOSED _ what is npp? Don't understand this quantity.,kg m-2 s-1,time: mean area: mean where land,,,,,down,real,longitude latitude time,nppLeaf,land,,area: areacella,,
+2,Carbon Mass Flux due to NPP Allocation to Wood,kg m-2 s-1,This is the rate of carbon uptake by wood due to NPP,,nppWood,,PF: net_primary_production_allocated_into_wood npp_allocation_to_wood NOT PROPOSED _ what is npp? Don't understand this quantity.,kg m-2 s-1,time: mean area: mean where land,,,,,down,real,longitude latitude time,nppWood,land,,area: areacella,,
+2,Carbon Mass Flux due to NPP Allocation to Roots,kg m-2 s-1,This is the rate of carbon uptake by roots due to NPP,,nppRoot,,PF: net_primary_production_allocated_into_roots npp_allocation_to_root NOT PROPOSED _ what is npp? Don't understand this quantity.,kg m-2 s-1,time: mean area: mean where land,,,,,down,real,longitude latitude time,nppRoot,land,,area: areacella,,
+1,Net Carbon Mass Flux out of Atmophere due to Net Ecosystem Productivity on Land.,kg m-2 s-1,"Natural flux of CO2 (expressed as a mass flux of carbon) from the atmosphere to the land calculated as the difference between uptake associated will photosynthesis and the release of CO2 from the sum of plant and soil respiration and fire.  Positive flux is into the land.  emissions from natural fires + human ignition fires as calculated by the fire module of the DGVM, but excluding any CO2 flu [...]
+
+,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/oclim.csv b/Tables_csv/oclim.csv
new file mode 100644
index 0000000..94effa3
--- /dev/null
+++ b/Tables_csv/oclim.csv
@@ -0,0 +1,36 @@
+CMOR Table Oclim: Monthly Mean Ocean Climatology (Jan. 1986-Dec. 2005 of historical run),,,,,Oclim,monClim,,,,,,,,,,,,,,,,
+(All Saved on the Ocean Grid),,,,,,,,,,,,,,,,,,,,,,
+"Further explanation of the fields in the following tables can be found in Griffies et al., available at  http://eprints.soton.ac.uk/65415/01/137_WGOMD_ModelOutput.pdf .  Some of the information in that document will be transcribed into the ""comment"" column  of this spreadsheet.",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+In CMOR Table Oclim: WGOMD Table 2.9,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+3,Ocean Vertical Heat Diffusivity,m2 s-1,,,difvho,ocean_vertical_heat_diffusivity,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvho,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Salt Diffusivity ,m2 s-1,,,difvso,ocean_vertical_salt_diffusivity,ocean_vertical_salt_diffusivity_due_to_background,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvso,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Tracer Diffusivity due to Background ,m2 s-1,,,difvtrbo,ocean_vertical_tracer_diffusivity_due_to_background,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvtrbo,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Tracer Diffusivity due to Tides ,m2 s-1,,,difvtrto,ocean_vertical_tracer_diffusivity_due_to_tides,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvtrto,ocean,,area: areacello volume: volcello,,
+3,Tendency of Ocean Potential Energy Content ,W m-2,,,tnpeo,tendency_of_ocean_potential_energy_content,,W m-2,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,tnpeo,ocean,,area: areacello volume: volcello,,
+3,Tendency of Ocean Potential Energy Content due to Tides ,W m-2,,,tnpeot,tendency_of_ocean_potential_energy_content_due_to_tides,,W m-2,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,tnpeot,ocean,,area: areacello volume: volcello,,
+3,Tendency of Ocean Potential Energy Content due to Background,W m-2,,,tnpeotb,tendency_of_ocean_potential_energy_content_due_to_background,,W m-2,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,tnpeotb,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Momentum Diffusivity,m2 s-1,,,difvmo,ocean_vertical_momentum_diffusivity,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvmo,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Momentum Diffusivity due to Background,m2 s-1,,,difvmbo,ocean_vertical_momentum_diffusivity_due_to_background,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvmbo,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Momentum Diffusivity due to Tides,m2 s-1,,,difvmto,ocean_vertical_momentum_diffusivity_due_to_tides,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvmto,ocean,,area: areacello volume: volcello,,
+3,Ocean Vertical Momentum Diffusivity due to Form Drag,m2 s-1,,,difvmfdo,ocean_vertical_momentum_diffusivity_due_to_form_drag,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difvmfdo,ocean,,area: areacello volume: volcello,,
+3,Ocean Kinetic Energy Dissipation Per Unit Area due to Vertical Friction,W m-2,,,dispkevfo,ocean_kinetic_energy_dissipation_per_unit_area_due_to_vertical_friction,,W m-2,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,dispkevfo,ocean,,area: areacello volume: volcello,,
+In CMOR Table Oclim: WGOMD Table 2.10,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+3,Ocean Tracer Bolus Laplacian Diffusivity ,m2 s-1,,,diftrblo,ocean_tracer_bolus_laplacian_diffusivity,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,diftrblo,ocean,,,,
+3,Ocean Tracer Bolus Biharmonic Diffusivity ,m4 s-1,,,diftrbbo,ocean_tracer_bolus_biharmonic_diffusivity,,m4 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,diftrbbo,ocean,,area: areacello volume: volcello,,
+3,Ocean Tracer Epineutral Laplacian Diffusivity ,m2 s-1,,,diftrelo,ocean_tracer_epineutral_laplacian_diffusivity,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,diftrelo,ocean,,area: areacello volume: volcello,,
+3,Ocean Tracer Epineutral Biharmonic Diffusivity ,m4 s-1,,,diftrebo,ocean_tracer_epineutral_biharmonic_diffusivity,,m4 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,diftrebo,ocean,,area: areacello volume: volcello,,
+3,Ocean Tracer XY Laplacian Diffusivity ,m2 s-1,,,diftrxylo,ocean_tracer_xy_laplacian_diffusivity,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,diftrxylo,ocean,,area: areacello volume: volcello,,
+3,Ocean Tracer XY Biharmonic Diffusivity ,m4 s-1,,,diftrxybo,ocean_tracer_xy_biharmonic_diffusivity,,m4 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,diftrxybo,ocean,,area: areacello volume: volcello,,
+3,Tendency of Ocean Eddy Kinetic Energy Content due to Bolus Transport ,W m-2,,,tnkebto,tendency_of_ocean_eddy_kinetic_energy_content_due_to_bolus_transport,,W m-2,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,tnkebto,ocean,,area: areacello volume: volcello,,
+3,Ocean Momentum XY Laplacian Diffusivity,m2 s-1,,,difmxylo,ocean_momentum_xy_laplacian_diffusivity,,m2 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difmxylo,ocean,,area: areacello volume: volcello,,
+3,Ocean Momentum XY Biharmonic Diffusivity,m4 s-1,,,difmxybo,ocean_momentum_xy_biharmonic_diffusivity,,m4 s-1,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,difmxybo,ocean,,area: areacello volume: volcello,,
+3,Ocean Kinetic Energy Dissipation Per Unit Area due to XY Friction,W m-2,,,dispkexyfo,ocean_kinetic_energy_dissipation_per_unit_area_due_to_xy_friction,,W m-2,time: mean within years time: mean over years,,,,,,real,longitude latitude olevel time2,dispkexyfo,ocean,,area: areacello volume: volcello,,
\ No newline at end of file
diff --git a/Tables_csv/olmon.csv b/Tables_csv/olmon.csv
new file mode 100644
index 0000000..97b5b2c
--- /dev/null
+++ b/Tables_csv/olmon.csv
@@ -0,0 +1,53 @@
+CMOR Table OImon: Monthly Mean Ocean Cryosphere Fields,,,,,OImon,mon,,,,,,,,,,,,,,,,
+"(All saved on the ocean grid; unless otherwise indicated, values are averaged over only the ocean portion of each grid cell and report 0.0 where ocean fraction is 0.)",,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Sea Ice Area Fraction,%,fraction of grid cell covered by sea ice.,,sic,sea_ice_area_fraction,,%,time: mean,,,,,,real,longitude latitude time,sic,seaIce ocean,,area: areacello,,
+1,Sea Ice Thickness,m,"Compute the mean thickness of sea ice in the ocean portion of the grid cell (averaging over the entire ocean portion, including the ice-free fraction).  Report as 0.0 in regions free of sea ice.",,sit,sea_ice_thickness,,m,time: mean area: mean where sea,,,,,,real,longitude latitude time,sit,seaIce ocean,,area: areacello,,
+1,Water Evaporation Flux from Sea Ice,kg m-2 s-1,"Compute the average rate that water mass evaporates (or sublimates) from the sea ice surface (i.e., kg/s) divided by the area of the ocean (i.e., open ocean + sea ice) portion of the grid cell. This quantity multiplied both by the oean area of the grid cell and by the length of the month should yield the total mass of water evaporated (or sublimated) from the sea ice.  Report as 0.0 in regions free of sea ice.  [This was computed differen [...]
+1,Snow Depth,m,"Compute the mean thickness of snow in the ocean portion of the grid cell (averaging over the entire ocean portion, including the snow-free ocean fraction).  Report as 0.0 in regions free of snow-covered sea ice.",, snd,surface_snow_thickness,,m,time: mean area: mean where sea,,,,,,real,longitude latitude time, snd,seaIce,,area: areacello,,
+2,Surface Snow Area Fraction,%,Fraction of entire grid cell covered by snow that lies on sea ice; exclude snow that lies on land or land ice.,, snc,surface_snow_area_fraction,,%,time: mean,,,,,,real,longitude latitude time, snc,seaIce,,area: areacello,,
+1,Bare Sea Ice Albedo,1,"Report as ""missing"" if there is no sunlight or if a region is free of sea ice. ","This variable may be omitted unless the answers to the following questions are obvious:  Will this vary from year to year or is it a property of ""bare sea ice"" and sun angle? How is the time-mean calculated?", ialb,,bare_sea_ice_albedo,1,time: mean area: mean where sea_ice,,,,,,real,longitude latitude time, ialb,seaIce,,area: areacello,,
+,,,,,,,,,,,,,,,,,,,,area: areacello,,
+,,,,,,,,,,,,,,,,,,,,,,
+3,Sea Ice Salinity,psu,"When computing the time-mean here, the time-samples, weighted by the mass of sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of sea ice. ",,ssi,,sea_ice_salinity,psu,time: mean (weighted by mass of sea ice),,,,,,real,longitude latitude time,ssi,seaIce,,area: areacello,,
+1,Surface Temperature of Sea Ice,K,"When computing the time-mean here, the time-samples, weighted by the area of sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of sea ice.  Note this will be the surface snow temperature in regions where snow covers the sea ice.",, tsice,,surface_temperature_of_sea_ice,K,time: mean (weighted by area of sea ice),,,,,,real,longitude latitude time, tsice,seaIce,,area: areacello,,
+1,Temperature at Interface Between Sea Ice and Snow,K,"When computing the time-mean here, the time-samples, weighted by the area of snow-covered sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of snow-covered sea ice. ",, tsnint,,temperature_at_interface_between_sea_ice_and_snow,K,time: mean (weighted by area of snow-covered sea ice),,,,,,real,longitude latitude time, tsnint,seaIce,,area: areacello,,
+1,Surface Rainfall Rate into the Sea Ice Portion of the Grid Cell,kg m-2 s-1,where sea ice over sea: compute the the water mass per unit time falling as rain onto the sea ice portion of a grid cell divided by the area of the ocean portion of the grid cell (including both ice-free and sea-ice covered fractions).  Report as 0. in regions free of sea ice.,, pr,,surface_rainfall_rate_into_the_sea_ice_portion_of_the_grid_cell,kg m-2 s-1,time: mean area: mean where sea_ice over sea,,,,,,real,l [...]
+1,Surface Snowfall Rate into the Sea Ice Portion of the Grid Cell,kg m-2 s-1,where sea ice over sea: compute the the water mass per unit time falling as snow onto the sea ice portion of a grid cell divided by the area of the ocean portion of the grid cell (including both ice-free and sea-ice covered fractions).  Report as 0. in regions free of sea ice.,, prsn,,surface_snowfall_rate_into_the_sea_ice_portion_of_the_grid_cell,kg m-2 s-1,time: mean area: mean where sea_ice over sea,,,,,,real [...]
+3,Age of Sea Ice,years,"When computing the time-mean here, the time samples, weighted by the mass of sea ice in the grid cell, are accumulated and then divided by the sum of the weights.  Report as ""missing"" in regions free of sea ice. ",, ageice,,age_of_sea_ice,years,time: mean (weighted b mass of sea ice),,,,,,real,longitude latitude time, ageice,seaIce,,area: areacello,,
+1,Frazil Sea Ice Growth (Leads) Rate,kg m-2 s-1,Compute the rate of change of sea ice mass due to frazil sea ice formation divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.,, grFrazil,,frazil_sea_ice_growth_(leads)_rate,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, grFrazil,seaIce,,area: areacello,,
+1,Congelation Sea Ice Growth Rate,kg m-2 s-1,Compute the rate of change of sea ice mass due to congelation sea ice divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.,, grCongel,,congelation_sea_ice_growth_rate,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, grCongel,seaIce,,area: areacello,,
+1,Lateral Sea Ice Growth Rate,kg m-2 s-1,Compute the rate of change of sea ice mass due to lateral growth alone of the sea ice divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.,, grLateral,,lateral_sea_ice_growth_rate,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, grLateral,seaIce,,area: areacello,,
+1,Snow-Ice Formation Rate,kg m-2 s-1,"Compute the rate of change of sea ice mass due to transformation of snow to sea ice, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of snow-covered sea ice.",, snoToIce,,snow-ice_formation_rate,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, snoToIce,seaIce,,area: areacello,,
+1,Snow Melt Rate,kg m-2 s-1,"Compute the rate of change of snow mass  due to melting, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice.  Include falling snow that melts on impact with the surface. ",, snomelt,,snow_melt_rate,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, snomelt,seaIce,,area: areacello,,
+1,Rate of Melt at Upper Surface of Sea Ice,kg m-2 s-1,"Compute the rate of change of sea ice mass due to melting at its upper surface, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice. ",Should this  also include melting of  snow that covers sea ice? , tmelt,,rate_of_melt_at_upper_surface_of_sea_ice,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, tmelt,seaIce,,area: areacello,,
+1,Rate of Melt at Sea Ice Base,kg m-2 s-1,"Compute the rate of change of sea ice mass due to melting at its lower surface, divided by the area of the ocean portion of the grid cell.  Report as 0.0 in regions free of sea ice. ",, bmelt,,rate_of_melt_at_sea_ice_base,kg m-2 s-1,time: mean area: mean where sea,,,,,,real,longitude latitude time, bmelt,seaIce,,area: areacello,,
+2,Sea Ice Total Heat Content,   J,"Ice at 0 Celsius is assumed taken to have a heat content of 0 J.  When averaging over time, this quantity is weighted by the mass of sea ice.   Report as ""missing in regions free of snow on land.",should this include heat content of snow on sea ice?, hcice,,sea_ice_total_heat_content,   J,time: mean (weighted by mass of sea ice),,,,,,real,longitude latitude time, hcice,seaIce,,area: areacello,,
+1,Downward Shortwave over Sea Ice,W m-2,Compute the downward shortwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.,priority was raised from 2 to 1 because snow albedo was deleted., rsdssi,surface_downwelling_shortwave_flux_in_air,,W m-2,time: mean area: mean where sea_ice over sea,,,,,down,real,longitude latitude time, rsdssi,seaIce,,area: areacello,,
+1,Upward Shortwave over Sea Ice,W m-2,Compute the upward shortwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.,priority was raised from 2 to 1 because snow albedo was deleted., rsussi,surface_upwelling_shortwave_flux_in_air,,W m-2,time: mean area: mean where sea_ice over sea,,,,,up,real,longitude latitude time, rsussi,seaIce,,area: areacello,,
+2,Downward Long Wave over Sea Ice,W m-2,Compute the downward longwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.,, rldssi,surface_downwelling_longwave_flux_in_air,,W m-2,time: mean area: mean where sea_ice over sea,,,,,down,real,longitude latitude time, rldssi,seaIce,,area: areacello,,
+2,Upward Long Wave over Sea Ice,W m-2,Compute the upward longwave flux in regions of sea ice divided by the area of the ocean portion of the grid cell.,, rlussi,surface_upwelling_longwave_flux_in_air,,W m-2,time: mean area: mean where sea_ice over sea,,,,,up,real,longitude latitude time, rlussi,seaIce,,area: areacello,,
+2,Surface Upward Sensible Heat Flux over Sea Ice,W m-2,Compute the upward sensible heat flux in regions of sea ice divided by the area of the ocean portion of the grid cell.,, hfssi,surface_upward_sensible_heat_flux,,W m-2,time: mean area: mean where sea_ice over sea,,,,,up,real,longitude latitude time, hfssi,seaIce,,area: areacello,,
+2,Surface Upward Latent Heat Flux over Sea Ice,W m-2,Compute the upward latent heat flux in regions of sea ice divided by the area of the ocean portion of the grid cell.,, hflssi,surface_upward_latent_heat_flux,,W m-2,time: mean area: mean where sea_ice over sea,,,,,up,real,longitude latitude time, hflssi,seaIce,,area: areacello,,
+2,Sublimation over Sea Ice,kg m-2,Compute the upward flux of water vapor to the atmosphere due to sublimation of snow and sea  ice in regions of sea ice divided by the area of the ocean portion of the grid cell.,, sblsi,surface_snow_and_ice_sublimation_flux,,kg m-2,time: mean area: mean where sea_ice over sea,,,,,up,real,longitude latitude time, sblsi,seaIce,,area: areacello,,
+1,Eastward Sea Ice Transport,kg s-1,The sea ice transport is 0.0 in ice-free regions of the ocean.,,transix,,,kg s-1,time: mean,,,,,,real,longitude latitude time,transix,seaIce,,area: areacello,,
+1,Northward Sea Ice Transport,kg s-1,The sea ice transport is 0.0 in ice-free regions of the ocean.,,transiy,,,kg s-1,time: mean,,,,,,real,longitude latitude time,transiy,seaIce,,area: areacello,,
+2,Sea Ice Mass Transport Through Fram Strait,kg s-1,,,transifs,,,kg s-1,time: mean,,,,,,real,time,transifs,seaIce,,area: areacello,,
+2,Eastward Atmospheric Stress On Sea Ice,N m-2,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",Shouldn't these be x and y components rather than northward and eastward?,strairx,,,N m-2,time: mean (weighted by area of sea ice),,,,,down,real,longitude latitude time,strairx,seaIce,,area: areacello,,
+2,Northward Atmospheric Stress On Sea Ice,N m-2,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",Shouldn't these be x and y components rather than northward and eastward?,strairy,,,N m-2,time: mean (weighted by area of sea ice),,,,,down,real,longitude latitude time,strairy,seaIce,,area: areacello,,
+2,Eastward Ocean Stress On Sea Ice,N m-2,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",Shouldn't these be x and y components rather than northward and eastward?,strocnx,,,N m-2,time: mean (weighted by area of sea ice),,,,,,real,longitude latitude time,strocnx,seaIce ocean,,area: areacello,,
+2,Northward Ocean Stress On Sea Ice,N m-2,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",Shouldn't these be x and y components rather than northward and eastward?,strocny,,,N m-2,time: mean (weighted by area of sea ice),,,,,,real,longitude latitude time,strocny,seaIce ocean,,area: areacello,,
+2,Compressive Sea Ice Strength,N m-2,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",,streng,,,N m-2,time: mean (weighted by area of sea ice),,,,,,real,longitude latitude time,streng,seaIce,,area: areacello,,
+2,Strain Rate Divergence of Sea Ice,s-1,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",,divice,,,s-1,time: mean (weighted by area of sea ice),,,,,,real,longitude latitude time,divice,seaIce,,area: areacello,,
+2,Strain Rate Shear of Sea Ice,s-1,"When computing the time-mean here, the time samples, weighted by the area of sea ice, are accumulated and then divided by the sum of the weights.   Report as ""missing"" in regions free of sea ice. ",,shrice,,,s-1,time: mean (weighted by area of sea ice),,,,,,real,longitude latitude time,shrice,seaIce,,area: areacello,,
+2,Sea Ice Ridging Rate,s-1,,This field may be omitted unless the answers to the following questions are obvious:  How exactly is this defined?  Are time-means weighted by sea ice area?,ridgice,,,s-1,time: mean,,,,,,real,longitude latitude time,ridgice,seaIce,,area: areacello,,
+,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/omon.csv b/Tables_csv/omon.csv
new file mode 100644
index 0000000..b013f41
--- /dev/null
+++ b/Tables_csv/omon.csv
@@ -0,0 +1 @@
+Reqeusted periods for saving special CFMIP model output,,,appearing in cfMon table,,,,,,,,appearing in cfOff,,appearing in  cfDay,,,,appearing in cf3hr,,,,appearing in cfSites,,,
Experiment  Name,Experiment Description,Experiment number,CFMIP monthly 3D (A1c_cfmip),,CFMIP monthly 4xCO2 2D,,CFMIP monthly 4xCO2 3D,,"CFMIP monthly inline (A1d,f,g)",,CFMIP monthly offline (A1e),,"CFMIP daily 2D (A2a,c,f)",,"CFMIP daily 3D (A2b,d,g)",,CFMIP 3-hourly orbital offline (A2e),,CFMIP 3-hourly inline (A4),,CFMIP time-step station data (A3),,,
pre-industrial control,coupled atmosphere/ocean control run,3.1,,,1*,20*, , ,121*,140*,,,121*,140*,136*,140*,,,,,,,,
historical,simulation of recent past (1850-2005),3.2,,,,,,,1979,2005,,,1979,2005,,,,,,,,,,
AMIP,AMIP (1979-at least 2008),3.3,1979,2008,1979,2008,1979,2008,1979,2008,2008,2008,1979,2008,1979,2008,2008,2008,2008,2008,1979,2008,,
ESM fixed climate 1,"radiation code ""sees"" control CO2, but carbon cycle sees 1%/yr rise",5.4-1,,,,,,,121,140,,,121,140,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,
ESM feedback 1,"carbon cycle ""sees"" control CO2, but radiatation sees 1%/yr rise",5.5-1,,,,,,,121,140,,,121,140,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,
1 percent per year CO2,impose a 1%/yr increase in CO2 to quadrupling,6.1,,,,,,,121,140,,,121,140,136,140,,,,,,,,
control SST climatology,control run climatological SSTs & sea ice imposed.,6.2a,,,1,30, , ,1,30,,,1,30,,,,,,,,,,
CO2 forcing,"as in expt. 6.2a, but with 4XCO2 imposed",6.2b,,,,,,,1,30,,,1,30,,,,,,,,,,
abrupt 4XCO2,"impose an instantaneous quadrupling of CO2, then hold fixed",6.3,,,,,,,1,20,,,,,,,,,,,,,,
abrupt 4XCO2,"impose an instantaneous quadrupling of CO2, then hold fixed",6.3,,,,,,,121,140,,,121,140,136,140,,,,,,,,
abrupt 4XCO2,"generate an ensemble of runs like expt. 6.3, initialized in different months, and terminated after 5 years",6.3-E,,,,,,,1,5,,,1,5,,,,,,,,,,
all aerosol forcing,"as in expt. 6.2a, but with aerosols from year 2000 of expt. 3.2",6.4a,,,,,,,1,30,,,1,30,,,,,,,,,,
sulfate aerosol forcing,"as in expt. 6.2a, but with sulfate aerosols from year 2000 of expt. 3.2",6.4b,,,,,,,1,30,,,1,30,,,,,,,,
4xCO2 AMIP,AMIP (1979-2008) conditions (expt. 3.3) but with 4xCO2,6.5,1979,2008, , , , ,1979,2008,2008,2008,1979,2008,1979,2008,2008,2008,,,1979,2008
AMIP plus patterned anomaly,"consistent with CFMIP, patterned SST anomalies added to AMIP conditions (expt. 3.3)",6.6,1979,2008, , , , ,1979,2008,2008,2008,1979,2008,1979,2008,2008,2008,,,1979,2008
aqua planet control,"consistent with CFMIP, zonally uniform SSTs for ocean-covered earth",6.7a,1,5,1,5,1,5,1,5,,,1,5,1,5,,,,,1,5
4xCO2 aqua planet,"as in expt. 6.7a, but with 4XCO2",6.7b,1,5,,,,,1,5,,,1,5,1,5,,,,,1,5
aqua planet plus 4K anomaly,"as in expt. 6.7a, but with a uniform 4K increase in SST",6.7c,1,5,,,,,1,5,,,1,5,1,5,,,,,1,5
AMIP plus 4K anomaly,"as in expt. 3.3, but with a uniform 4K increase in SST",6.8,1979,2008, , , , ,1979,2008,2008,2008,1979,2008,1979,2008,2008,2008,,,1979,2008

"* The years specified for the pre-industrial experiment are relative to the point in this control where expts. 6.1 and 6.3 were initiated.  6.1 and 6.3 should be initiated from the same point in the control run, so that the control run sampled output can be compared directly to each of these runs, and any drift in the control can be accounted for.  ",,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/oyr.csv b/Tables_csv/oyr.csv
new file mode 100644
index 0000000..e512bef
--- /dev/null
+++ b/Tables_csv/oyr.csv
@@ -0,0 +1,92 @@
+"CMOR Table Oyr: Annual Mean Ocean Fields, Including Biogechemical Fields",,,,,Oyr,yr,,,,,,,,,,,,,,,,
+(All Saved on the Ocean Grid),,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+In CMOR Table Oyr: 3-D Marine Biogeochemical Tracer Fields,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+1,Dissolved Inorganic Carbon Concentration,mol m-3,Dissolved inorganic carbon (CO3+HCO3+H2CO3) concentration,,dissic,,mole_concentration_of_dissolved_inorganic_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dissic,ocnBgchem,,area: areacello volume: volcello,,
+2,Dissolved Organic Carbon Concentration,mol m-3,Dissolved organic carbon concentration,,dissoc,,mole_concentration_of_dissolved_organic_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dissoc,ocnBgchem,,area: areacello volume: volcello,,
+2,Phytoplankton Carbon Concentration,mol m-3,"sum of phytoplankton carbon component concentrations.  In most (all?) cases this is the sum of phycdiat and phycmisc (i.e., ""Diatom Carbon Concentration"" and ""Non-Diatom Phytoplankton Carbon Concentration""",,phyc,,mole_concentration_of_phytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyc,ocnBgchem,,area: areacello volume: volcello,,
+2,Zooplankton Carbon Concentration,mol m-3,sum of zooplankton carbon component concentrations,,zooc,,mole_concentration_of_zooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,zooc,ocnBgchem,,area: areacello volume: volcello,,
+3,Bacterial Carbon Concentration,mol m-3,sum of bacterial carbon component concentrations,,bacc,,mole_concentration_of_bacteria_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bacc,ocnBgchem,,area: areacello volume: volcello,,
+2,Detrital Organic Carbon Concentration,mol m-3,sum of detrital organic carbon component concentrations,,detoc,,mole_concentration_of_organic_detritus_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,detoc,ocnBgchem,,area: areacello volume: volcello,,
+2,Calcite Concentration,mol m-3,"sum of particulate calcite component concentrations (e.g. Phytoplankton, Detrital, etc.)",,calc,,mole_concentration_of_calcite_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,calc,ocnBgchem,,area: areacello volume: volcello,,
+2,Aragonite Concentration,mol m-3,"sum of particulate aragonite components (e.g. Phytoplankton, Detrital, etc.)",,arag,,mole_concentration_of_aragonite_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,arag,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Diatoms expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_diatoms_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Diazotrophs Expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_diazotrophs_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Calcareous Phytoplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_calcareous_phytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Picophytoplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_picophytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Miscellaneous Phytoplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_miscellaneous_phytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Microzooplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_microzooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Mesozooplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_mesozooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+,,,,,,,,,,,,,,,,,,,,,,
+3,Other Zooplankton Carbon Concentration,mol m-3,"carbon from additional zooplankton component concentrations alone (e.g. Micro, meso).  Since the models all have different numbers of components, this variable has been included to provide a check for intercomparison between models since some phytoplankton groups are supersets.",,zoocmisc,,mole_concentration_of_miscellaneous_zooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude  [...]
+1,Total Alkalinity,mol m-3,"total alkalinity equivalent concentration (including carbonate, nitrogen, silicate, and borate components)",,talk,,sea_water_alkalinity_expressed_as_mole_equivalent,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,talk,ocnBgchem,,area: areacello volume: volcello,,
+1,pH,1,negative log of hydrogen ion concentration with the concentration expressed as mol H kg-1.,,ph,,sea_water_ph_reported_on_total_scale,1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,ph,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolve Oxygen Concentration,mol m-3,dissolved oxygen gas concentration in sea water,,o2,,mole_concentration_of_molecular_oxygen_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,o2,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Nitrate Concentration,mol m-3,dissolved nitrate concentration in sea water,,no3,mole_concentration_of_nitrate_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,no3,ocnBgchem,,area: areacello volume: volcello,,
+2,Dissolved Ammonium Concentration,mol m-3,dissolved ammonium concentration in sea water,,nh4,mole_concentration_of_ammonium_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,nh4,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Phosphate Concentration,mol m-3,dissolved Phosphate concentration in sea water,,po4,mole_concentration_of_phosphate_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,po4,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Iron Concentration,mol m-3,dissolved iron concentration in sea water,"dissolved iron is meant to include both Fe2+ and Fe3+ ions (but not, e.g., particulate detrital iron)",dfe,,mole_concenration_of_dissolved_iron_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dfe,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Silicate Concentration,mol m-3,dissolved silicate concentration in sea water,,si,mole_concentration_of_silicate_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,si,ocnBgchem,,area: areacello volume: volcello,,
+1,Total Chlorophyll Mass Concentration,kg m-3,"sum of chlorophyll from all phytoplankton group concentrations.  In most models this is equal to chldiat+chlmisc, that is the sum of ""Diatom Chlorophyll Mass Concentration"" plus ""Other Phytoplankton Chlorophyll Mass Concentration""",,chl,mass_concentration_of_phytoplankton_expressed_as_chlorophyll_in_sea_water,,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,chl,ocnBgchem,,area: areacello volume: volcello,,
+3,Diatom Chlorophyll Mass Concentration,kg m-3,chlorophyll from diatom phytoplankton component concentration alone,,chldiat,,mass_concentration_of_diatoms_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,chldiat,ocnBgchem,,area: areacello volume: volcello,,
+3,Mass Concentration of Diazotrophs expressed as Chlorophyll in Sea Water,kg m-3,,,,,mass_concentration_of_diazotrophs_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mass Concentration of Calcareous Phytoplankton expressed as Chlorophyll in Sea Water,kg m-3,,,,,mass_concentration_of_calcareous_phytoplankton_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mass Concentration of Picophytoplankton expressed as Chlorophyll in Sea Water,kg m-3,,,,,mass_concentration_of_picophytoplankton_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+,,,,,,,,,,,,,,,,,,,,,,
+3,Other Phytoplankton Chlorophyll Mass Concentration,kg m-3,chlorophyll from additional phytoplankton component concentrations alone,,chlmisc,,mass_concentration_of_miscellaneous_phytoplankton_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,chlmisc,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Organic Nitrogen Concentration,mol m-3,sum of particulate organic nitrogen component concentrations,,pon,,mole_concentration_of_particulate_organic_matter_expressed_as_nitrogen_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pon,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Organic Phosphorus Concentration,mol m-3,sum of particulate organic phosphorus component concentrations,,pop,,mole_concentration_of_particulate_organic_matter_expressed_as_phosphorus_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pop,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Biogenic Iron Concentration,mol m-3,sum of particulate organic iron component concentrations,,bfe,,mole_concentration_of_particulate_organic_matter_expressed_as_iron_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bfe,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Biogenic Silica Concentration,mol m-3,sum of particulate silica component concentrations,,bsi,,mole_concentration_of_particulate_matter_expressed_as_silicon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bsi,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Nitrogen Concentration,mol m-3,sum of phytoplankton nitrogen component concentrations,,phyn,mole_concentration_of_phytoplankton_expressed_as_nitrogen_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyn,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Phosphorus Concentration,mol m-3,sum of phytoplankton phosphorus components,,phyp,,mole_concentration_of_phytoplankton_expressed_as_phosphorus_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyp,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Iron Concentration,mol m-3,sum of phytoplankton iron component concentrations,,phyfe,,mole_concentration_of_phytoplankton_expressed_as_iron_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyfe,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Silica Concentration,mol m-3,sum of phytoplankton silica component concentrations,,physi,,mole_concentration_of_phytoplankton_expressed_as_silicon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,physi,ocnBgchem,,area: areacello volume: volcello,,
+3,Dimethyl Sulphide Concentration,mol m-3,dimethyl sulphide concentration,,dms,,mole_concentration_of_dimethyl_sulfide_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dms,ocnBgchem,,area: areacello volume: volcello,,
+2,Mole Concentration of Carbonate expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_carbonate_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+2,Mole Concentration of Calcite expressed as Carbon in Sea Water at Saturation,mol m-3,,"is it clear what ""saturation"" refers to? Is this like ""saturation vapor pressure""?  If so, should we say ""Saturation Mole Concentration""?",,,mole_concentration_of_calcite_expressed_as_carbon_in_sea_water_at_saturation,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+2,Mole Concentration of Aragonite expressed as Carbon in Sea Water at Saturation,mol m-3,,"is it clear what ""saturation"" refers to? Is this like ""saturation vapor pressure""?  If so, should we say ""Saturation Mole Concentration""?",,,mole_concentration_of_aragonite_expressed_as_carbon_in_sea_water_at_saturation,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+In CMOR Table Oyr: Marine Biogeochemical 3-D Fields:  Rates of Production and Removal,,,,,,,,,,,,,,,,,,,,,,
+priority,long name,units ,comment ,questions,output variable name ,standard name,unconfirmed or proposed standard name,unformatted units,cell_methods,valid min,valid max,mean absolute min,mean absolute max,positive,type,CMOR dimensions,CMOR variable name,realm,frequency,cell_measures,flag_values,flag_meanings
+3,Primary Carbon Production by Phytoplankton,mol m-3 s-1,total primary (organic carbon) production by phytoplankton,,pp,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_primary_production,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pp,ocnBgchem,,area: areacello volume: volcello,,
+3,Primary Carbon Production by Phytoplankton Based on NO3 Alone,mol m-3 s-1,Primary (organic carbon) production by phytoplankton based on NO3 alone,,pnew,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_new_primary_production,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pnew,ocnBgchem,,area: areacello volume: volcello,,
+3,Biogenic Iron Production,mol m-3 s-1,Biogenic iron production,,pbfe,,tendency_of_mole_concentration_of_iron_in_sea_water_due_to_biological_production,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pbfe,ocnBgchem,,area: areacello volume: volcello,,
+3,Biogenic Silica Production,mol m-3 s-1,Biogenic silica production,,pbsi,,tendency_of_mole_concentration_of_silicon_in_sea_water_due_to_biological_production,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pbsi,ocnBgchem,,area: areacello volume: volcello,,
+3,Calcite Production,mol m-3 s-1,calcite production,,pcalc,,tendency_of_mole_concentration_of_calcite_expressed_as_carbon_in_sea_water_due_to_biological_production,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pcalc,ocnBgchem,,area: areacello volume: volcello,,
+3,Aragonite Production,mol m-3 s-1,aragonite production,,parag,,tendency_of_mole_concentration_of_aragonite_expressed_as_carbon_in_sea_water_due_to_biological_production,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,parag,ocnBgchem,,area: areacello volume: volcello,,
+3,Sinking Particulate Organic Carbon Flux,mol m-2 s-1,sinking flux of organic carbon,,expc,,sinking_mole_flux_of_particulate_organic_carbon_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,expc,ocnBgchem,,area: areacello volume: volcello,,
+3,Sinking Particulate Organic Nitrogen Flux,mol m-2 s-1,sinking flux of organic nitrogen,,expn,,sinking_mole_flux_of_particulate_organic_nitrogen_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,expn,ocnBgchem,,area: areacello volume: volcello,,
+3,Sinking Particulate Organic Phosphorus Flux,mol m-2 s-1,sinking flux of organic phosphorus,,expp,,sinking_mole_flux_of_particulate_organic_phosphorus_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,expp,ocnBgchem,,,,
+3,Sinking Particulate Iron Flux,mol m-2 s-1,sinking flux of iron,,expcfe,,sinking_mole_flux_of_particulate_iron_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,expcfe,ocnBgchem,,,,
+3,Sinking Particulate Silica Flux,mol m-2 s-1,sinking flux of silica,,expsi,,sinking_mole_flux_of_particulate_silicon_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,expsi,ocnBgchem,,area: areacello volume: volcello,,
+3,Sinking Calcite Flux,mol m-2 s-1,sinking flux of calcite,,expcalc,,sinking_mole_flux_of_calcite_expressed_as_carbon_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,expcalc,ocnBgchem,,area: areacello volume: volcello,,
+3,Sinking Aragonite Flux,mol m-2 s-1,sinking flux of aragonite,,exparag,,sinking_mole_flux_of_aragonite_expressed_as_carbon_in_sea_water,mol m-2 s-1,time: mean area: mean where sea ,,,,,down,real,longitude latitude olevel time,exparag,ocnBgchem,,area: areacello volume: volcello,,
+3,Calcite Dissolution,mol m-3 s-1,calcite dissolution,,dcalc,,tendency_of_mole_concentration_of_calcite_expressed_as_carbon_in_sea_water_due_to_dissolution,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dcalc,ocnBgchem,,area: areacello volume: volcello,,
+3,Aragonite Dissolution,mol m-3 s-1,aragonite dissolution,,darag,,tendency_of_mole_concentration_of_aragonite_expressed_as_carbon_in_sea_water_due_to_dissolution,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,darag,ocnBgchem,,area: areacello volume: volcello,,
+3,Diatom Primary Carbon Production,mol m-3 s-1,Primary (organic carbon) production by the diatom component alone,,pdi,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_primary_production_by_diatoms,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pdi,ocnBgchem,,area: areacello volume: volcello,,
+3,Tendency of Mole Concentration of Organic Carbon in Sea Water due to Net Primary Production by Diazatrophs,mol m-3 s-1,,,,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_primary_production_by_diazatrophs,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Tendency of Mole Concentration of Organic Carbon in Sea Water due to Net Primary Production by Picophytoplankton,mol m-3 s-1,,,,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_primary_production_by_calcareous_phytoplankton,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Tendency of Mole Concentration of Organic Carbon in Sea Water due to Net Primary Production by Picophytoplankton,mol m-3 s-1,,,,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_primary_production_by picophytoplankton,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+,,,,,,,,,,,,,,,,,,,,,,
+3,Other Phytoplankton Carbon Production,mol m-3 s-1,Primary (organic carbon) production by other phytoplankton components alone,I think this variable is unnecessary since it can be gotten by subtracting diatom primary carbon production from pp.,phypmisc,,tendency_of_mole_concentration_of_organic_carbon_in_sea_water_due_to_net_primary_production_by_miscellaneous_phytoplankton,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phypmisc,ocnBgchem,,area: ar [...]
+3,Rate of Change of Dissolved Inorganic Carbon due to Biological Activity,mol m-3 s-1,Net of biological terms in time rate of change of dissolved inorganic carbon,,bddtdic,,tendency_of_mole_concentration_of_dissolved_inorganic_carbon_in_sea_water_due_to_biological_processes,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bddtdic,ocnBgchem,,area: areacello volume: volcello,,
+3,Rate of Change of Nitrogen Nutrient due to Biological Activity,mol m-3 s-1,Net of biological terms in time rate of change of nitrogen nutrients (e.g. NO3+NH4),,bddtdin,,tendency_of_mole_concentration_of_dissolved_inorganic_nitrogen_in_sea_water_due_to_biological_processes,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bddtdin,ocnBgchem,,area: areacello volume: volcello,,
+3,Rate of Change of Dissolved Phosphate due to Biological Activity,mol m-3 s-1,Net of biological terms in time rate of change of dissolved phosphate,,bddtdip,,tendency_of_mole_concentration_of_dissolved_inorganic_phosphate_in_sea_water_due_to_biological_processes,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bddtdip,ocnBgchem,,area: areacello volume: volcello,,
+3,Rate of Change of Dissolved Inorganic Iron due to Biological Activity,mol m-3 s-1,Net of biological terms in time rate of change of dissolved inorganic iron,,bddtdife,,tendency_of_mole_concentration_of_dissolved_inorganic_iron_in_sea_water_due_to_biological_processes,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bddtdife,ocnBgchem,,area: areacello volume: volcello,,
+3,Rate of Change of Dissolved Inorganic Silicate due to Biological Activity,mol m-3 s-1,Net of biological terms in time rate of change of dissolved inorganic silicate,,bddtdisi,,tendency_of_mole_concentration_of_dissolved_inorganic_silicate_in_sea_water_due_to_biological_processes,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bddtdisi,ocnBgchem,,area: areacello volume: volcello,,
+3,Rate of Change of Alkalinity due to Biological Activity,mol m-3 s-1,Net of biological terms in time rate of change of alkalinity,"Is ""eq"" in udunits? Dunne says ""equivalents"" is preferred to 10**-6 (i.e., ppm) or kmol/m**3?",bddtalk,,tendency_of_sea_water_alkalinity_expressed_as_mole_equivalent_due_to_biological_processes,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bddtalk,ocnBgchem,,area: areacello volume: volcello,,
+3,Nonbiogenic Iron Scavenging,mol m-3 s-1,Dissolved Fe removed through nonbiogenic scavenging onto particles,,fescav,,tendency_of_mole_concentration_of_dissolved_iron_in_sea_water_due_to_scavenging_by_particles,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,fescav,ocnBgchem,,area: areacello volume: volcello,,
+3,Particle Source of Dissolved Iron,mol m-3 s-1,"Dissolution, remineralization and desorption of iron back to the dissolved phase",,fediss,,tendency_of_mole_concentration_of_dissolved_iron_in_sea_water_due_to_dissolution_from_particles,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,fediss,ocnBgchem,,area: areacello volume: volcello,,
+3,Total Grazing of Phytoplankton by Zooplankton,mol m-3 s-1,Total grazing of phytoplankton by zooplankton,,graz,,tendency_of_mole_concentration_of_dissolved_iron_in_sea_water_due_to_grazing_of_phytoplankton,mol m-3 s-1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,graz,ocnBgchem,,area: areacello volume: volcello,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/Tables_csv/oyr_tracer.csv b/Tables_csv/oyr_tracer.csv
new file mode 100644
index 0000000..428cea4
--- /dev/null
+++ b/Tables_csv/oyr_tracer.csv
@@ -0,0 +1,44 @@
+1,Dissolved Inorganic Carbon Concentration,mol m-3,Dissolved inorganic carbon (CO3+HCO3+H2CO3) concentration,,dissic,,mole_concentration_of_dissolved_inorganic_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dissic,ocnBgchem,,area: areacello volume: volcello,,
+2,Dissolved Organic Carbon Concentration,mol m-3,Dissolved organic carbon concentration,,dissoc,,mole_concentration_of_dissolved_organic_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dissoc,ocnBgchem,,area: areacello volume: volcello,,
+2,Phytoplankton Carbon Concentration,mol m-3,"sum of phytoplankton carbon component concentrations.  In most (all?) cases this is the sum of phycdiat and phycmisc (i.e., ""Diatom Carbon Concentration"" and ""Non-Diatom Phytoplankton Carbon Concentration""",,phyc,,mole_concentration_of_phytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyc,ocnBgchem,,area: areacello volume: volcello,,
+2,Zooplankton Carbon Concentration,mol m-3,sum of zooplankton carbon component concentrations,,zooc,,mole_concentration_of_zooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,zooc,ocnBgchem,,area: areacello volume: volcello,,
+3,Bacterial Carbon Concentration,mol m-3,sum of bacterial carbon component concentrations,,bacc,,mole_concentration_of_bacteria_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bacc,ocnBgchem,,area: areacello volume: volcello,,
+2,Detrital Organic Carbon Concentration,mol m-3,sum of detrital organic carbon component concentrations,,detoc,,mole_concentration_of_organic_detritus_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,detoc,ocnBgchem,,area: areacello volume: volcello,,
+2,Calcite Concentration,mol m-3,"sum of particulate calcite component concentrations (e.g. Phytoplankton, Detrital, etc.)",,calc,,mole_concentration_of_calcite_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,calc,ocnBgchem,,area: areacello volume: volcello,,
+2,Aragonite Concentration,mol m-3,"sum of particulate aragonite components (e.g. Phytoplankton, Detrital, etc.)",,arag,,mole_concentration_of_aragonite_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,arag,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Diatoms expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_diatoms_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Diazotrophs Expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_diazotrophs_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Calcareous Phytoplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_calcareous_phytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Picophytoplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_picophytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Miscellaneous Phytoplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_miscellaneous_phytoplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Microzooplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_microzooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mole Concentration of Mesozooplankton expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_mesozooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+,,,,,,,,,,,,,,,,,,,,,,
+3,Other Zooplankton Carbon Concentration,mol m-3,"carbon from additional zooplankton component concentrations alone (e.g. Micro, meso).  Since the models all have different numbers of components, this variable has been included to provide a check for intercomparison between models since some phytoplankton groups are supersets.",,zoocmisc,,mole_concentration_of_miscellaneous_zooplankton_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude  [...]
+1,Total Alkalinity,mol m-3,"total alkalinity equivalent concentration (including carbonate, nitrogen, silicate, and borate components)",,talk,,sea_water_alkalinity_expressed_as_mole_equivalent,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,talk,ocnBgchem,,area: areacello volume: volcello,,
+1,pH,1,negative log of hydrogen ion concentration with the concentration expressed as mol H kg-1.,,ph,,sea_water_ph_reported_on_total_scale,1,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,ph,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolve Oxygen Concentration,mol m-3,dissolved oxygen gas concentration in sea water,,o2,,mole_concentration_of_molecular_oxygen_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,o2,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Nitrate Concentration,mol m-3,dissolved nitrate concentration in sea water,,no3,mole_concentration_of_nitrate_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,no3,ocnBgchem,,area: areacello volume: volcello,,
+2,Dissolved Ammonium Concentration,mol m-3,dissolved ammonium concentration in sea water,,nh4,mole_concentration_of_ammonium_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,nh4,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Phosphate Concentration,mol m-3,dissolved Phosphate concentration in sea water,,po4,mole_concentration_of_phosphate_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,po4,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Iron Concentration,mol m-3,dissolved iron concentration in sea water,"dissolved iron is meant to include both Fe2+ and Fe3+ ions (but not, e.g., particulate detrital iron)",dfe,,mole_concenration_of_dissolved_iron_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dfe,ocnBgchem,,area: areacello volume: volcello,,
+1,Dissolved Silicate Concentration,mol m-3,dissolved silicate concentration in sea water,,si,mole_concentration_of_silicate_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,si,ocnBgchem,,area: areacello volume: volcello,,
+1,Total Chlorophyll Mass Concentration,kg m-3,"sum of chlorophyll from all phytoplankton group concentrations.  In most models this is equal to chldiat+chlmisc, that is the sum of ""Diatom Chlorophyll Mass Concentration"" plus ""Other Phytoplankton Chlorophyll Mass Concentration""",,chl,mass_concentration_of_phytoplankton_expressed_as_chlorophyll_in_sea_water,,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,chl,ocnBgchem,,area: areacello volume: volcello,,
+3,Diatom Chlorophyll Mass Concentration,kg m-3,chlorophyll from diatom phytoplankton component concentration alone,,chldiat,,mass_concentration_of_diatoms_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,chldiat,ocnBgchem,,area: areacello volume: volcello,,
+3,Mass Concentration of Diazotrophs expressed as Chlorophyll in Sea Water,kg m-3,,,,,mass_concentration_of_diazotrophs_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mass Concentration of Calcareous Phytoplankton expressed as Chlorophyll in Sea Water,kg m-3,,,,,mass_concentration_of_calcareous_phytoplankton_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+3,Mass Concentration of Picophytoplankton expressed as Chlorophyll in Sea Water,kg m-3,,,,,mass_concentration_of_picophytoplankton_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+,,,,,,,,,,,,,,,,,,,,,,
+3,Other Phytoplankton Chlorophyll Mass Concentration,kg m-3,chlorophyll from additional phytoplankton component concentrations alone,,chlmisc,,mass_concentration_of_miscellaneous_phytoplankton_expressed_as_chlorophyll_in_sea_water,kg m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,chlmisc,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Organic Nitrogen Concentration,mol m-3,sum of particulate organic nitrogen component concentrations,,pon,,mole_concentration_of_particulate_organic_matter_expressed_as_nitrogen_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pon,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Organic Phosphorus Concentration,mol m-3,sum of particulate organic phosphorus component concentrations,,pop,,mole_concentration_of_particulate_organic_matter_expressed_as_phosphorus_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,pop,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Biogenic Iron Concentration,mol m-3,sum of particulate organic iron component concentrations,,bfe,,mole_concentration_of_particulate_organic_matter_expressed_as_iron_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bfe,ocnBgchem,,area: areacello volume: volcello,,
+3,Particulate Biogenic Silica Concentration,mol m-3,sum of particulate silica component concentrations,,bsi,,mole_concentration_of_particulate_matter_expressed_as_silicon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,bsi,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Nitrogen Concentration,mol m-3,sum of phytoplankton nitrogen component concentrations,,phyn,mole_concentration_of_phytoplankton_expressed_as_nitrogen_in_sea_water,,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyn,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Phosphorus Concentration,mol m-3,sum of phytoplankton phosphorus components,,phyp,,mole_concentration_of_phytoplankton_expressed_as_phosphorus_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyp,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Iron Concentration,mol m-3,sum of phytoplankton iron component concentrations,,phyfe,,mole_concentration_of_phytoplankton_expressed_as_iron_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,phyfe,ocnBgchem,,area: areacello volume: volcello,,
+3,Phytoplankton Silica Concentration,mol m-3,sum of phytoplankton silica component concentrations,,physi,,mole_concentration_of_phytoplankton_expressed_as_silicon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,physi,ocnBgchem,,area: areacello volume: volcello,,
+3,Dimethyl Sulphide Concentration,mol m-3,dimethyl sulphide concentration,,dms,,mole_concentration_of_dimethyl_sulfide_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,dms,ocnBgchem,,area: areacello volume: volcello,,
+2,Mole Concentration of Carbonate expressed as Carbon in Sea Water,mol m-3,,,,,mole_concentration_of_carbonate_expressed_as_carbon_in_sea_water,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+2,Mole Concentration of Calcite expressed as Carbon in Sea Water at Saturation,mol m-3,,"is it clear what ""saturation"" refers to? Is this like ""saturation vapor pressure""?  If so, should we say ""Saturation Mole Concentration""?",,,mole_concentration_of_calcite_expressed_as_carbon_in_sea_water_at_saturation,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
+2,Mole Concentration of Aragonite expressed as Carbon in Sea Water at Saturation,mol m-3,,"is it clear what ""saturation"" refers to? Is this like ""saturation vapor pressure""?  If so, should we say ""Saturation Mole Concentration""?",,,mole_concentration_of_aragonite_expressed_as_carbon_in_sea_water_at_saturation,mol m-3,time: mean area: mean where sea ,,,,,,real,longitude latitude olevel time,0,ocnBgchem,,area: areacello volume: volcello,,
diff --git a/Tables_csv/standard_output.xlsx b/Tables_csv/standard_output.xlsx
new file mode 100644
index 0000000..8cc533c
Binary files /dev/null and b/Tables_csv/standard_output.xlsx differ
diff --git a/Test/3D_txy.input b/Test/3D_txy.input
new file mode 100644
index 0000000..a28b89a
--- /dev/null
+++ b/Test/3D_txy.input
@@ -0,0 +1 @@
+Test/tas_mytest_reorder.asc
diff --git a/Test/3D_txy_split_lon.input b/Test/3D_txy_split_lon.input
new file mode 100644
index 0000000..3fbc567
--- /dev/null
+++ b/Test/3D_txy_split_lon.input
@@ -0,0 +1 @@
+Test/tas_mytest_reorder_split_lon.asc
diff --git a/Test/3D_xty_split_lon.input b/Test/3D_xty_split_lon.input
new file mode 100644
index 0000000..c1ccd19
--- /dev/null
+++ b/Test/3D_xty_split_lon.input
@@ -0,0 +1 @@
+Test/tas_3D_xty_-180_180.asc
diff --git a/Test/CMIP5_Amon_YYYYMMDDHH b/Test/CMIP5_Amon_YYYYMMDDHH
new file mode 100644
index 0000000..0b7d8c3
--- /dev/null
+++ b/Test/CMIP5_Amon_YYYYMMDDHH
@@ -0,0 +1,2080 @@
+table_id: Table Amon
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   05 March 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute parent_experiment_id branch_time
+
+expt_id_ok: '10- or 30-year run initialzed at YYYYMMDDHH' 'mytestYYYYMMDDHH'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plevs
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 30000. 25000. 20000. 15000. 10000. 7000. 5000. 3000. 2000. 1000.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevbnds
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time2
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+climatology:      yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Near-Surface Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ts
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Surface Temperature
+comment:           ""skin"" temperature (i.e., SST for open ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ts
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: minimum within days time: mean over time
+long_name:         Daily Minimum Near-Surface Air Temperature
+comment:           monthly mean of the daily-minimum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: maximum within days time: mean over time
+long_name:         Daily Maximum Near-Surface Air Temperature
+comment:           monthly mean of the daily-maximum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: mean
+long_name:         Sea Level Pressure
+comment:           not, in general, the same as surface pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Air Pressure
+comment:           not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) northward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hurs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          hurs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meters) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Snowfall Flux
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsbl
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Evaporation
+comment:           at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evspsbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tauu
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_eastward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Eastward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauu
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauv
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_northward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Northward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauv
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Incident Shortwave Radiation
+comment:           incident shortwave at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Shortwave Radiation
+comment:           at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere (to be compared with satellite measurements)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    prw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_water_vapor_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Water Vapor Path
+comment:           vertically integrated through the atmospheric column
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rtmt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_downward_radiative_flux_at_top_of_atmosphere_model
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Net Downward Flux at Top of Model
+comment:           i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rtmt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ci 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Convection Occurs
+comment:           Fraction of time that convection occurs in the grid cell .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ci 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sci
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Shallow Convection Occurs
+comment:           Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2antt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg C m-2 s-1
+cell_methods:      time: mean
+long_name:         Total Anthropogenic CO2 Flux (All Emissions)
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and all sources associated with anthropogenic land use change.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2antt
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2fos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg C m-2 s-1
+cell_methods:      time: mean
+long_name:         Fossil Fuel Anthropogenic CO2 Flux (Fossil Fuel Emissions)
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2fos
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2nat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg C m-2 s-1
+cell_methods:      time: mean
+long_name:         Natural Net Surface Flux of CO2 into The Atmosphere
+comment:           Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e., ""net biospheric productivity"", for land, and ""air to sea C [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2nat
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+long_name:         Cloud Area Fraction
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cells. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+long_name:         Mass Fraction of Cloud Ice
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud ice in the grid cell divided by the mass of air (including the water in all phases) in the grid cell. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_convective_mass_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The atmosphere convective mass flux is the vertical transport of mass for a field of cumulus clouds or thermals, given by the product of air density and vertical velocity.  The flux is computed as the mass divided by the area of the grid cell.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevbnds time
+out_name:          mc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Mole Fraction of O3
+comment:           If this does not change over time (except possibly to vary identically over each annual cycle), report instead the variable described in the next table entry. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3Clim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Mole Fraction of O3
+comment:           If O3 does not vary from one year to the next, report 12 months, starting with January.   (Note: include all 12 months even if the values don't vary seasonally.)  When calling CMOR, identify this variable as tro3Clim, not tro3. If the O3 varies from one year to the next,  then report instead the field described in the previous table entry.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean
+long_name:         Mole Fraction of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2Clim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean within years time: mean over years
+long_name:         Mole Fraction of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2Clim, not co2.   If  CO2 is spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2mass
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean
+long_name:         Total Atmospheric Mass of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2massClim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean within years time: mean over years
+long_name:         Total Atmospheric Mass of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2massClim, not co2mass.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4global, not ch4.   If  CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4global
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially nonuniform, omit this field, but report Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4globalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If CH4 is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2o
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as n2oglobal, not n2o.   If  N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobal
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially nonuniform, omit this field, but report Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If N2O is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+long_name:         Pressure on Model Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time2
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+long_name:         Pressure on Model Half-Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevbnds time2
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
diff --git a/Test/CMIP5_Amons b/Test/CMIP5_Amons
new file mode 100644
index 0000000..e3df49a
--- /dev/null
+++ b/Test/CMIP5_Amons
@@ -0,0 +1,10929 @@
+table_id: Table Amon
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   30 March 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plevs
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 30000. 25000. 20000. 15000. 10000. 7000. 5000. 3000. 2000. 1000.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time2
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+climatology:      yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Near-Surface Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ts
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Surface Temperature
+comment:           ""skin"" temperature (i.e., SST for open ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ts
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: minimum within days time: mean over days
+long_name:         Daily Minimum Near-Surface Air Temperature
+comment:           monthly mean of the daily-minimum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: maximum within days time: mean over days
+long_name:         Daily Maximum Near-Surface Air Temperature
+comment:           monthly mean of the daily-maximum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: mean
+long_name:         Sea Level Pressure
+comment:           not, in general, the same as surface pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Air Pressure
+comment:           not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) northward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hurs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          hurs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meters) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Snowfall Flux
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Evaporation
+comment:           at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evspsbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tauu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_eastward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Eastward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauu
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauv
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_northward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Northward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauv
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Incident Shortwave Radiation
+comment:           incident shortwave at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Shortwave Radiation
+comment:           at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere (to be compared with satellite measurements)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    prw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_water_vapor_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Water Vapor Path
+comment:           vertically integrated through the atmospheric column
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rtmt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_downward_radiative_flux_at_top_of_atmosphere_model
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Net Downward Flux at Top of Model
+comment:           i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rtmt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ci 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Convection Occurs
+comment:           Fraction of time that convection occurs in the grid cell .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ci 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sci
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Shallow Convection Occurs
+comment:           Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2antt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg  m-2 s-1
+cell_methods:      time: mean
+long_name:         Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2antt
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2fos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2fos
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2nat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources
+comment:           Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e., ""net ecosystem biospheric productivity"", for land, and ""ai [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2nat
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud Area Fraction
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cells. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Ice
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud ice in the grid cell divided by the mass of air (including the water in all phases) in the grid cell. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_convective_mass_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  The flux is computed as the mass divided by the area of the grid cell.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          mc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of O3
+comment:           If this does not change over time (except possibly to vary identically over each annual cycle), report instead the variable described in the next table entry. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3Clim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of O3
+comment:           If O3 does not vary from one year to the next, report 12 months, starting with January.   (Note: include all 12 months even if the values don't vary seasonally.)  When calling CMOR, identify this variable as tro3Clim, not tro3. If the O3 varies from one year to the next,  then report instead the field described in the previous table entry.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2Clim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2Clim, not co2.   If  CO2 is spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2mass
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean
+long_name:         Total Atmospheric Mass of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2massClim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean within years time: mean over years
+long_name:         Total Atmospheric Mass of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2massClim, not co2mass.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4global, not ch4.   If  CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4global
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially nonuniform, omit this field, but report Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4globalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If CH4 is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2o
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as n2oglobal, not n2o.   If  N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobal
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially nonuniform, omit this field, but report Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If N2O is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Pressure on Model Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time2
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Pressure on Model Half-Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time2
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls0 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls0 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls1 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls1 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls2 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls2 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls3 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls3 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls4 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls4 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls5 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls5 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls6 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls6 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls7 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls7 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls8 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls8 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls9 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls9 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls10 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls10 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls11 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls11 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls12 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls12 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls13 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls13 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls14 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls14 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls15 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls15 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls16 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls16 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls17 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls17 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls18 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls18 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls19 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls19 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls20 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls20 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls21 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls21 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls22 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls22 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls23 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls23 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls24 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls24 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls25 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls25 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls26 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls26 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls27 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls27 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls28 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls28 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls29 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls29 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls30 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls30 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls31 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls31 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls32 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls32 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls33 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls33 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls34 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls34 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls35 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls35 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls36 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls36 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls37 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls37 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls38 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls38 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls39 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls39 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls40 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls40 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls41 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls41 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls42 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls42 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls43 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls43 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls44 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls44 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls45 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls45 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls46 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls46 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls47 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls47 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls48 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls48 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls49 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls49 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls50 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls50 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls51 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls51 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls52 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls52 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls53 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls53 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls54 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls54 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls55 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls55 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls56 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls56 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls57 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls57 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls58 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls58 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls59 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls59 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls60 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls60 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls61 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls61 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls62 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls62 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls63 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls63 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls64 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls64 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls65 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls65 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls66 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls66 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls67 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls67 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls68 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls68 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls69 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls69 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls70 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls70 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls71 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls71 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls72 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls72 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls73 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls73 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls74 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls74 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls75 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls75 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls76 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls76 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls77 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls77 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls78 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls78 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls79 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls79 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls80 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls80 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls81 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls81 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls82 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls82 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls83 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls83 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls84 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls84 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls85 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls85 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls86 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls86 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls87 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls87 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls88 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls88 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls89 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls89 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls90 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls90 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls91 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls91 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls92 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls92 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls93 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls93 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls94 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls94 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls95 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls95 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls96 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls96 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls97 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls97 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls98 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls98 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls99 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls99 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls100 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls100 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls101 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls101 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls102 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls102 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls103 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls103 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls104 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls104 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls105 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls105 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls106 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls106 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls107 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls107 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls108 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls108 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls109 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls109 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls110 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls110 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls111 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls111 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls112 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls112 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls113 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls113 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls114 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls114 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls115 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls115 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls116 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls116 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls117 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls117 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls118 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls118 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls119 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls119 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls120 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls120 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls121 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls121 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls122 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls122 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls123 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls123 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls124 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls124 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls125 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls125 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls126 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls126 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls127 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls127 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls128 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls128 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls129 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls129 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls130 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls130 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls131 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls131 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls132 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls132 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls133 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls133 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls134 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls134 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls135 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls135 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls136 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls136 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls137 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls137 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls138 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls138 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls139 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls139 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls140 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls140 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls141 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls141 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls142 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls142 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls143 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls143 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls144 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls144 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls145 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls145 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls146 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls146 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls147 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls147 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls148 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls148 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls149 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls149 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls150 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls150 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls151 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls151 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls152 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls152 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls153 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls153 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls154 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls154 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls155 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls155 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls156 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls156 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls157 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls157 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls158 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls158 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls159 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls159 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls160 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls160 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls161 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls161 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls162 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls162 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls163 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls163 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls164 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls164 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls165 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls165 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls166 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls166 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls167 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls167 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls168 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls168 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls169 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls169 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls170 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls170 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls171 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls171 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls172 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls172 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls173 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls173 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls174 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls174 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls175 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls175 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls176 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls176 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls177 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls177 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls178 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls178 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls179 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls179 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls180 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls180 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls181 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls181 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls182 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls182 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls183 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls183 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls184 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls184 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls185 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls185 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls186 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls186 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls187 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls187 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls188 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls188 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls189 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls189 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls190 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls190 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls191 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls191 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls192 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls192 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls193 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls193 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls194 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls194 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls195 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls195 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls196 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls196 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls197 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls197 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls198 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls198 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls199 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls199 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls200 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls200 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls201 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls201 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls202 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls202 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls203 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls203 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls204 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls204 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls205 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls205 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls206 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls206 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls207 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls207 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls208 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls208 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls209 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls209 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls210 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls210 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls211 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls211 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls212 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls212 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls213 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls213 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls214 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls214 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls215 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls215 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls216 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls216 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls217 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls217 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls218 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls218 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls219 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls219 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls220 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls220 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls221 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls221 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls222 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls222 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls223 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls223 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls224 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls224 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls225 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls225 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls226 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls226 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls227 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls227 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls228 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls228 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls229 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls229 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls230 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls230 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls231 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls231 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls232 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls232 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls233 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls233 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls234 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls234 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls235 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls235 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls236 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls236 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls237 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls237 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls238 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls238 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls239 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls239 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls240 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls240 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls241 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls241 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls242 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls242 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls243 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls243 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls244 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls244 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls245 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls245 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls246 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls246 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls247 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls247 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls248 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls248 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls249 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls249 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls250 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls250 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls251 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls251 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls252 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls252 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls253 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls253 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls254 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls254 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls255 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls255 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls256 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls256 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls257 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls257 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls258 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls258 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls259 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls259 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls260 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls260 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls261 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls261 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls262 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls262 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls263 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls263 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls264 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls264 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls265 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls265 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls266 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls266 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls267 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls267 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls268 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls268 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls269 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls269 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls270 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls270 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls271 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls271 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls272 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls272 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls273 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls273 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls274 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls274 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls275 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls275 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls276 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls276 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls277 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls277 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls278 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls278 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls279 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls279 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls280 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls280 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls281 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls281 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls282 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls282 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls283 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls283 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls284 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls284 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls285 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls285 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls286 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls286 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls287 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls287 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls288 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls288 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls289 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls289 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls290 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls290 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls291 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls291 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls292 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls292 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls293 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls293 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls294 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls294 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls295 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls295 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls296 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls296 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls297 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls297 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls298 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls298 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls299 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls299 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls300 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls300 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls301 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls301 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls302 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls302 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls303 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls303 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls304 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls304 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls305 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls305 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls306 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls306 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls307 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls307 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls308 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls308 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls309 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls309 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls310 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls310 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls311 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls311 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls312 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls312 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls313 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls313 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls314 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls314 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls315 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls315 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls316 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls316 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls317 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls317 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls318 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls318 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls319 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls319 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls320 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls320 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls321 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls321 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls322 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls322 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls323 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls323 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls324 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls324 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls325 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls325 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls326 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls326 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls327 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls327 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls328 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls328 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls329 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls329 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls330 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls330 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls331 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls331 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls332 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls332 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls333 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls333 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls334 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls334 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls335 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls335 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls336 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls336 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls337 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls337 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls338 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls338 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls339 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls339 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls340 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls340 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls341 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls341 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls342 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls342 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls343 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls343 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls344 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls344 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls345 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls345 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls346 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls346 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls347 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls347 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls348 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls348 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls349 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls349 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls350 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls350 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls351 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls351 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls352 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls352 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls353 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls353 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls354 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls354 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls355 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls355 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls356 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls356 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls357 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls357 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls358 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls358 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls359 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls359 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls360 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls360 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls361 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls361 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls362 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls362 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls363 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls363 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls364 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls364 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls365 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls365 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls366 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls366 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls367 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls367 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls368 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls368 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls369 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls369 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls370 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls370 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls371 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls371 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls372 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls372 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls373 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls373 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls374 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls374 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls375 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls375 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls376 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls376 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls377 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls377 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls378 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls378 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls379 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls379 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls380 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls380 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls381 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls381 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls382 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls382 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls383 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls383 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls384 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls384 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls385 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls385 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls386 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls386 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls387 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls387 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls388 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls388 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls389 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls389 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls390 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls390 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls391 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls391 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls392 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls392 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls393 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls393 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls394 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls394 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls395 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls395 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls396 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls396 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls397 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls397 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls398 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls398 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls399 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:           hfls399 
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
diff --git a/Test/CMIP5_cf3hr.txt b/Test/CMIP5_cf3hr.txt
new file mode 100644
index 0000000..0d9f43b
--- /dev/null
+++ b/Test/CMIP5_cf3hr.txt
@@ -0,0 +1,230 @@
+table_id: Table cf3hr
+modeling_realm: atmos
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   23 June 2009 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute
+
+expt_id_ok: '10-and 30-year predictions XXXX' 'decadal-XXXX'
+expt_id_ok: 'volcano-free hindcasts' 'no-volcano'
+expt_id_ok: 'prediction with 2010 volcano' 'volcano-2010'
+expt_id_ok: 'chemistry-focused runs XXXX' 'decadal-chem-XXXX'
+expt_id_ok: 'pre-industrial control' 'pi-control'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'mid-holocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past-1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.X' 'rcp2x'
+expt_id_ok: 'RCP6' 'rcp6'
+expt_id_ok: 'ESM pre-industrial control' 'esm-control'
+expt_id_ok: 'ESM historical' 'esm-historical'
+expt_id_ok: 'ESM RCP8.5' 'esm-rcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esm-fixclim1'
+expt_id_ok: 'ESM fixed climate 2' 'esm-fixclim2'
+expt_id_ok: 'ESM feedback 1' 'esm-fdbk1'
+expt_id_ok: 'ESM feedback 2' 'esm-fdbk2'
+expt_id_ok: '1 percent per year CO2' '1pct-co2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt-4xco2'
+expt_id_ok: 'natural-only' 'historical-nat???'
+expt_id_ok: 'GHG-only' 'historical-ghg???'
+expt_id_ok: 'other-only' 'historical-???'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst-2030'
+expt_id_ok: 'control SST climatology' 'sstclim'
+expt_id_ok: 'CO2 forcing' 'sstclim-4xco2'
+expt_id_ok: 'aerosol forcing' 'sstclim-aerosol'
+expt_id_ok: '4xCO2 AMIP' 'amip-4xco2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amip-future'
+expt_id_ok: 'aqua planet control' 'aqua-control'
+expt_id_ok: '4xCO2 aqua planet' 'aqua-4xco2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua-4k'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip-4k'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+
+!============
+axis_entry: height40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height40
+!stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+! requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+! requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760.  [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: location
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    profile_id
+units:            1
+long_name:        location index
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         loc
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+!============
+axis_entry: section
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    section_id
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        section
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         section
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+!============
+axis_entry: vertices
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    vertices
+units:            1
+long_name:        vertices
+!
+!============
+variable_entry: longitude
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  longitude 
+units:         degrees_east
+long_name:          Longitude
+comment:      function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location section
+out_name:  lon
+type:      real
+!----------------------------------
+!
+!============
+variable_entry: latitude 
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  latitude
+units:         degrees_north
+long_name:          Latitude
+comment:      function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location section
+out_name:  lat
+type:      real
+!----------------------------------
+!
+!============
+variable_entry: vertices_longitude
+!============
+!----------------------------------	
+standard_name:    vertices_longitude
+units:            degrees_east
+long_name:        longitude vertices coordinate 
+dimensions:	  vertices location section
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         vertices_lon
+valid_min:        0.        
+valid_max:        360.       
+!----------------------------------	
+!
+!
+!============
+variable_entry: vertices_latitude
+!============
+!----------------------------------	
+standard_name:    vertices_latitude
+units:            degrees_north
+long_name:        latitude vertices coordinate
+dimensions:	  vertices location section
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         vertices_lat
+valid_min:        -90.        
+valid_max:        90.
+!----------------------------------	
+!
+!
+
+!============
+variable_entry: curtain
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:         1
+long_name:     curtain
+comment:      Test of curtain format with grid
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      height40 location section
+out_name:  curtain
+type:      real
+!----------------------------------
+!
+
diff --git a/Test/CMIP5_cf3hr_0.txt b/Test/CMIP5_cf3hr_0.txt
new file mode 100644
index 0000000..34b0dbe
--- /dev/null
+++ b/Test/CMIP5_cf3hr_0.txt
@@ -0,0 +1,185 @@
+table_id: Table cf3hr
+modeling_realm: atmos
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   23 June 2009 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute
+
+expt_id_ok: '10-and 30-year predictions XXXX' 'decadal-XXXX'
+expt_id_ok: 'volcano-free hindcasts' 'no-volcano'
+expt_id_ok: 'prediction with 2010 volcano' 'volcano-2010'
+expt_id_ok: 'chemistry-focused runs XXXX' 'decadal-chem-XXXX'
+expt_id_ok: 'pre-industrial control' 'pi-control'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'mid-holocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past-1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.X' 'rcp2x'
+expt_id_ok: 'RCP6' 'rcp6'
+expt_id_ok: 'ESM pre-industrial control' 'esm-control'
+expt_id_ok: 'ESM historical' 'esm-historical'
+expt_id_ok: 'ESM RCP8.5' 'esm-rcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esm-fixclim1'
+expt_id_ok: 'ESM fixed climate 2' 'esm-fixclim2'
+expt_id_ok: 'ESM feedback 1' 'esm-fdbk1'
+expt_id_ok: 'ESM feedback 2' 'esm-fdbk2'
+expt_id_ok: '1 percent per year CO2' '1pct-co2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt-4xco2'
+expt_id_ok: 'natural-only' 'historical-nat???'
+expt_id_ok: 'GHG-only' 'historical-ghg???'
+expt_id_ok: 'other-only' 'historical-???'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst-2030'
+expt_id_ok: 'control SST climatology' 'sstclim'
+expt_id_ok: 'CO2 forcing' 'sstclim-4xco2'
+expt_id_ok: 'aerosol forcing' 'sstclim-aerosol'
+expt_id_ok: '4xCO2 AMIP' 'amip-4xco2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amip-future'
+expt_id_ok: 'aqua planet control' 'aqua-control'
+expt_id_ok: '4xCO2 aqua planet' 'aqua-4xco2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua-4k'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip-4k'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+
+!============
+axis_entry: height40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height40
+!stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+! requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+! requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760.  [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: location
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    profile_id
+units:            1
+long_name:        location index
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         loc
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+!============
+axis_entry: section
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    section_id
+units:            1
+long_name:        section
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         section
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+variable_entry: longitude
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  longitude
+units:         degrees_east
+long_name:          Longitude
+comment:      function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location
+out_name:  lon
+type:      real
+!----------------------------------
+!
+
+!============
+variable_entry: latitude
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  latitude
+units:         degrees_north
+long_name:          Latitude
+comment:      function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location
+out_name:  lat
+type:      real
+!----------------------------------
+!
+
+!============
+variable_entry: curtain
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:         1
+long_name:     curtain
+comment:      Test of curtain format with grid
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location section height40
+out_name:  curtain
+type:      real
+!----------------------------------
+!
+
diff --git a/Test/CMIP5_cf3hr_1.txt b/Test/CMIP5_cf3hr_1.txt
new file mode 100644
index 0000000..49161c9
--- /dev/null
+++ b/Test/CMIP5_cf3hr_1.txt
@@ -0,0 +1,185 @@
+table_id: Table cf3hr
+modeling_realm: atmos
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   23 June 2009 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute
+
+expt_id_ok: '10-and 30-year predictions XXXX' 'decadal-XXXX'
+expt_id_ok: 'volcano-free hindcasts' 'no-volcano'
+expt_id_ok: 'prediction with 2010 volcano' 'volcano-2010'
+expt_id_ok: 'chemistry-focused runs XXXX' 'decadal-chem-XXXX'
+expt_id_ok: 'pre-industrial control' 'pi-control'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'mid-holocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past-1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.X' 'rcp2x'
+expt_id_ok: 'RCP6' 'rcp6'
+expt_id_ok: 'ESM pre-industrial control' 'esm-control'
+expt_id_ok: 'ESM historical' 'esm-historical'
+expt_id_ok: 'ESM RCP8.5' 'esm-rcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esm-fixclim1'
+expt_id_ok: 'ESM fixed climate 2' 'esm-fixclim2'
+expt_id_ok: 'ESM feedback 1' 'esm-fdbk1'
+expt_id_ok: 'ESM feedback 2' 'esm-fdbk2'
+expt_id_ok: '1 percent per year CO2' '1pct-co2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt-4xco2'
+expt_id_ok: 'natural-only' 'historical-nat???'
+expt_id_ok: 'GHG-only' 'historical-ghg???'
+expt_id_ok: 'other-only' 'historical-???'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst-2030'
+expt_id_ok: 'control SST climatology' 'sstclim'
+expt_id_ok: 'CO2 forcing' 'sstclim-4xco2'
+expt_id_ok: 'aerosol forcing' 'sstclim-aerosol'
+expt_id_ok: '4xCO2 AMIP' 'amip-4xco2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amip-future'
+expt_id_ok: 'aqua planet control' 'aqua-control'
+expt_id_ok: '4xCO2 aqua planet' 'aqua-4xco2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua-4k'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip-4k'
+
+
+approx_interval:  1.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+
+!============
+axis_entry: height40
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    altitude
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        altitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height40
+!stored_direction: increasing
+tolerance:        0.001
+
+type:             double
+! requested:        240. 720. 1200. 1680. 2160. 2640. 3120. 3600. 4080. 4560. 5040. 5520. 6000. 6480. 6960. 7440. 7920. 8400. 8880. 9360. 9840. 10320. 10800. 11280. 11760. 12240. 12720. 13200. 13680. 14160. 14640. 15120. 15600. 16080. 16560. 17040. 17520. 18000. 18480. 18960.        ! space-separated list of requested coordinates 
+! requested_bounds: . 0. 480. 480. 960. 960. 1440. 1440. 1920. 1920. 2400. 2400. 2880. 2880. 3360. 3360. 3840. 3840. 4320. 4320. 4800. 4800. 5280. 5280. 5760. 5760. 6240. 6240. 6720. 6720. 7200. 7200. 7680. 7680. 8160. 8160. 8640. 8640. 9120. 9120. 9600. 9600. 10080. 10080. 10560. 10560. 11040. 11040. 11520. 11520. 12000. 12000. 12480. 12480. 12960. 12960. 13440. 13440. 13920. 13920. 14400. 14400. 14880. 14880. 15360. 15360. 15840. 15840. 16320. 16320. 16800. 16800. 17280. 17280. 17760.  [...]
+must_have_bounds: yes
+!----------------------------------
+!
+
+!============
+axis_entry: location
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    profile_id
+units:            1
+long_name:        location index
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         loc
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+!============
+axis_entry: section
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    section_id
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        section
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         section
+stored_direction: increasing
+type:             double
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+variable_entry: longitude
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  longitude
+units:         degrees_east
+long_name:          Longitude
+comment:      function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location
+out_name:  lon
+type:      real
+!----------------------------------
+!
+
+!============
+variable_entry: latitude
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:  latitude
+units:         degrees_north
+long_name:          Latitude
+comment:      function of time
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location
+out_name:  lat
+type:      real
+!----------------------------------
+!
+
+!============
+variable_entry: curtain
+!============
+modeling_realm:  atmos
+
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:         1
+long_name:     curtain
+comment:      Test of curtain format with grid
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:      location section height40
+out_name:  curtain
+type:      real
+!----------------------------------
+!
+
diff --git a/Test/CMOR_SAMPLE_TABLE b/Test/CMOR_SAMPLE_TABLE
new file mode 100644
index 0000000..0dc32ed
--- /dev/null
+++ b/Test/CMOR_SAMPLE_TABLE
@@ -0,0 +1,860 @@
+cmor_version: 1.0         ! version of CMOR that can read this table
+cf_version:   1.3         ! version of CF that output conforms to
+project_id:   IPCC        ! project id
+table_id:     Table 2     ! table id
+table_date:   22 October 2008 ! date this table was last updated
+
+modeling_realm: 	      atm 
+
+expt_id_ok:   'committed climate change experiment'  'ccce' ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   'control experiment (for committed climate change experiment)'
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'control experiment (for 1%/year CO2 run)'
+expt_id_ok:   '2xCO2 equilibrium experiment' '2xco2'
+expt_id_ok:   'control experiment (for 2xCO2 run)'
+
+required_global_attributes: creation_date tracking_id model_id forcing
+
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+
+! ??? What about climatological data???
+!
+
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!required: interval
+optional: interval
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since 1979-1-1
+axis:             T
+long_name:        time
+!----------------------------------	
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+valid_min:        0.
+valid_max:        110000.
+requested:        10000. 20000. 30000. 40000. 50000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: region
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: units cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    region
+long_name:        region
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+type:             character
+requested:        atlantic_ocean indian_ocean pacific_ocean global_ocean
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+ignored:  coord_vals
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+convert_to:       standard_hybrid_sigma
+z_factors:        ptop sigma ps
+z_bounds_factors: ptop sigma_bnds ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!     ignored:  coord_vals
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         eta
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0 a b ps
+z_bounds_factors: p0 a_bnds b_bnds ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0 ap b ps
+z_bounds_factors: p0 ap_bnds b_bnds ps
+!----------------------------------		
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        190.
+valid_max:        340.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+shuffle:          1
+deflate:          1
+deflate_level:    9
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: upward_surface_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+shuffle:          1
+deflate:          1
+deflate_level:    9
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  20.
+ok_max_mean_abs:  150.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time depth1
+!----------------------------------	 
+!
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+flag_values:  8    6   7 8     9654 
+flag_meanings: region5 region6 region7 region8 9region
+
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        150.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------	
+!
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          1.e-4
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------	
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction
+units:          %
+cell_methods:   time: mean
+long_name:      Total Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: ci
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction_i
+units:          %
+cell_methods:   time: mean
+long_name:      Total Cloud Fraction Crap
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         latitude longitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfogo
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  northward_ocean_heat_transport
+units:          W
+cell_methods:   time: mean
+long_name:      Northward Ocean Heat Transport
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         latitude region time
+valid_min:          -4.e15
+valid_max:          4.e15
+ok_min_mean_abs:    0.0
+ok_max_mean_abs:    4.e15
+!----------------------------------	
+!
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.5e5
+valid_max:        1.2e5
+ok_min_mean_abs:  0.9e5
+ok_max_mean_abs:  1.1e5
+!----------------------------------	
+!
+!
+!============
+variable_entry: p0
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       reference pressure for hybrid sigma coordinate 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel longitude
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer bounds
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
diff --git a/Test/Curts_table b/Test/Curts_table
new file mode 100644
index 0000000..f116bb2
--- /dev/null
+++ b/Test/Curts_table
@@ -0,0 +1,761 @@
+cmor_version: 1.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Curts_table A  ! table id
+table_date:   9 January 2006 ! date this table was constructed
+modeling_realm:	      atm
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)' '20c3m'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment'
+expt_id_ok:   'AMIP experiment'
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:   1.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate), but this is ignored if set to 0.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!bounds_requested:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+value:            287.8
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+value:            42.5
+!----------------------------------	
+!
+!
+
+! ??? What about climatological data???
+!
+
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------	
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 
+requested:         30000. 20000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A2a: Daily-mean 2-d atmosphere data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: tasmin
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: minimum
+long_name:       Minimum Daily Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        185.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tasmax
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: maximum
+long_name:       Maximum Daily Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        185.
+valid_max:        350.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       time longitude latitude height1
+valid_min:        185.
+valid_max:        330.
+ok_min_mean_abs:  260.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -300.
+valid_max:        2000.
+ok_min_mean_abs:  50.
+ok_max_mean_abs:  120.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfss
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_sensible_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Sensible Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Downwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+valid_min:        20.
+valid_max:        600.
+ok_min_mean_abs:  300.
+ok_max_mean_abs:  370.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Upwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        50.
+valid_max:        750.
+ok_min_mean_abs:  250.
+ok_max_mean_abs:  450.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Downwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+valid_min:        0.
+valid_max:        550.
+ok_min_mean_abs:  150.
+ok_max_mean_abs:  220.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Upwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: uas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   eastward_wind    
+units:           m s-1
+cell_methods:    time: mean
+long_name:       Zonal Surface Wind Speed
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height2
+!----------------------------------	
+! 
+!
+!============
+variable_entry: vas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   northward_wind    
+units:           m s-1
+cell_methods:    time: mean
+long_name:       Meridional Surface Wind Speed
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height2
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlut
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_longwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Outgoing Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        10.
+valid_max:        500.
+positive:         up
+!----------------------------------	
+! 
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A2b: Daily-mean 3-d atmosphere data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        100.
+valid_max:        360.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: va
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: northward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Meridional Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: hus
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: specific_humidity
+units:         1
+cell_methods:  time: mean
+long_name:     Specific Humidity 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        0.
+!----------------------------------	
+!
+!
+
diff --git a/Test/IPCC_table_A1 b/Test/IPCC_table_A1
new file mode 100644
index 0000000..359799b
--- /dev/null
+++ b/Test/IPCC_table_A1
@@ -0,0 +1,2364 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   17 November 2004 ! date this table was constructed
+required_global_attributes: creation_date tracking_id model_id forcing
+
+modeling_realm: atm
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment' '2xco2'
+expt_id_ok:   'AMIP experiment'
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate), but this is ignored if set to 0.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!bounds_requested:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+
+! ??? What about climatological data???
+!
+
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------	
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+!requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 
+!requested:         30000. 25000. 20000. 15000. 10000.  7000.  5000.
+!requested:          3000.  2000.  1000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!
+!
+!============
+axis_entry: pressure1
+!
+!   Scalar dimension (200 hPa) defined for near-tropopause radiation fluxes
+!      (rsntp, rlntp, rsntpcs, rlntpcs, rsftropa_?, rsftropi_?, rlftropa_?, 
+!       rlftropi_?, rsftropacs_?, rsftropics_?, rlftropacs_?, rlftropics_?)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+valid_min:        10000.
+valid_max:        30000.
+value:            20000.
+!----------------------------------
+!
+!
+!============
+axis_entry: pressure2
+!
+!   Is defined for Table A1d: ISCCP simulator data (clisccp)
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+stored_direction: decreasing
+units:            Pa
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+bounds_requested: 100000. 80000. 80000. 68000. 68000. 56000. 
+bounds_requested:  56000. 44000. 44000. 31000. 31000. 18000.
+bounds_requested:  18000.     0.
+!----------------------------------!
+!
+!
+!============
+axis_entry: pressure3
+!
+!   Is defined for Table A1e: sulfate aerosol data (trsul)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        100400. 98300. 95300. 91000. 84800. 76500. 66300. 
+requested:         54600. 42500. 31800. 23800. 18300. 14000. 10300.
+requested:          7200.  4700.  2700.  1300.   400.
+!----------------------------------	
+!
+!
+!============
+axis_entry: tau
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    cloud_optical_depth
+units:            1
+long_name:        optical depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+bounds_requested:  0.0  0.3  0.3  1.3  1.3  3.6  3.6  9.4 
+bounds_requested:  9.4 23.0 23.0 60.0 60.0 100000.
+!----------------------------------
+!
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+convert_to:       standard_hybrid_sigma
+z_factors:        ptop: ptop sigma: sigma ps: ps
+z_bounds_factors: ptop: ptop sigma: sigma_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+stored_direction: decreasing
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: a b: b orog: orog
+z_bounds_factors: a: a_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! Vertical dimensionless coordinate variables:
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: p0
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       reference pressure for hybrid sigma coordinate 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer bounds
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!============
+variable_entry: az
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate coefficient (eta) for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz
+!============
+!
+!    Override default argument specifications for cmor_variable 
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate coefficient (tau) for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate coefficient (eta) for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient (tau) for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1a: Monthly-mean 2-d atmosphere or land surface data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          1.e-3
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------	
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        195.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time depth1
+!----------------------------------	 
+!
+!
+!============
+variable_entry: mrso
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: soil_moisture_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Total Soil Moisture Content
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	 
+!
+!
+!============
+variable_entry: tauu
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downward_eastward_stress
+units:         Pa
+cell_methods:  time: mean
+long_name:     Zonal Surface Wind Stress
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tauv
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downward_northward_stress
+units:         Pa
+cell_methods:  time: mean
+long_name:     Meridional Surface Wind Stress
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: snd
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_thickness
+units:         m
+cell_methods:  time: mean
+long_name:     Snow Depth
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -120
+valid_max:        900.
+ok_min_mean_abs:  50.
+ok_max_mean_abs:  120.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfss
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_sensible_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Sensible Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Downwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+valid_min:        20.
+valid_max:        600.
+ok_min_mean_abs:  300.
+ok_max_mean_abs:  370.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Upwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        50.
+valid_max:        750.
+ok_min_mean_abs:  250.
+ok_max_mean_abs:  450.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Downwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+valid_min:        0.
+valid_max:        550.
+ok_min_mean_abs:  150.
+ok_max_mean_abs:  220.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Upwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: ts
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_temperature
+units:         K    
+cell_methods:  time: mean
+long_name:     Surface Skin Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        170.
+valid_max:        340.
+ok_min_mean_abs:  280.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.48e5
+valid_max:        1.1e5
+ok_min_mean_abs:  0.97e5
+ok_max_mean_abs:  1.0e5
+!----------------------------------	
+!
+!
+!============
+variable_entry: prsn
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  snowfall_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Snowfall Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: prc
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  convective_precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Convective Precipitation
+comment:        includes both liquid and solid phases
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: prw
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  atmosphere_water_vapor_content
+units:          kg m-2
+cell_methods:   time: mean
+long_name:      Precipitable Water
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          150.
+ok_min_mean_abs:    20.
+ok_max_mean_abs:    30. 
+!----------------------------------	
+!
+!
+!============
+variable_entry: mrfso
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: soil_frozen_water_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Soil Frozen Water Content
+comment:       excludes surface snow and ice
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+!----------------------------------	 
+!
+!
+!============
+variable_entry: mrros
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_runoff_flux
+units:         kg m-2 s-1
+cell_methods:  time: mean
+long_name:     Surface Runoff
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	 
+!
+!
+!============
+variable_entry: mrro
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: runoff_flux
+units:         kg m-2 s-1
+cell_methods:  time: mean
+long_name:     Surface and Subsurface Runoff
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	 
+!
+!
+!============
+variable_entry: snw
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_amount_where_land
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Snow Amount
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+!----------------------------------	 
+!
+!
+!============
+variable_entry: snc
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_area_fraction_where_land
+units:         %
+cell_methods:  time: mean
+long_name:     Snow Area Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+valid_max:          100.
+!----------------------------------	 
+!
+!
+!============
+variable_entry: snm
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_melt_flux_where_land
+units:         kg m-2 s-1
+cell_methods:  time: mean
+long_name:     Snow Melt
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+!----------------------------------	 
+!
+!
+!============
+variable_entry: uas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   eastward_wind    
+units:           m s-1
+cell_methods:    time: mean
+long_name:       Zonal Surface Wind Speed
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height2
+!----------------------------------	
+! 
+!
+!============
+variable_entry: vas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   northward_wind    
+units:           m s-1
+cell_methods:    time: mean
+long_name:       Meridional Surface Wind Speed
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height2
+!----------------------------------	
+! 
+!
+!============
+variable_entry: huss
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   specific_humidity   
+units:           kg kg-1
+cell_methods:    time: mean
+long_name:       Surface Specific Humidity
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        0.0
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsdt
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_incoming_shortwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     TOA Incident Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsut
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_shortwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     TOA Reflected Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlut
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_longwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Outgoing Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        10.
+valid_max:        500.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rtmt
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_downward_radiative_flux_at_top_of_atmosphere_model
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Flux at Top of Model
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsntp
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_downward_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Downward Shortwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlntp
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_upward_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Upward Longwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsntpcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_downward_shortwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Downward Clear-Sky Shortwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlntpcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_upward_longwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Upward Clear-Sky Longwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsdscs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Incident Surface Clear-Sky Shortwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsuscs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Reflected Surface Clear-Sky Shortwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rldscs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Downwelling Surface Clear-Sky Longwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlutcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_longwave_flux_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Outgoing Clear-Sky Longwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        10.
+valid_max:        500.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsutcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_shortwave_flux_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Reflected Clear-Sky Shortwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clt
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: cloud_area_fraction
+units:         %
+cell_methods:  time: mean
+long_name:     Total Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+valid_max:        100.0
+ok_min_mean_abs:  30.
+ok_max_mean_abs:  75.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clwvi
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_cloud_condensed_water_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Column Integerated Cloud Water Content
+comment:       should include both liquid and solid phase
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clivi
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_cloud_ice_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Column Integerated Cloud Ice Content
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1b: Time-independent 2-d land surface data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: orog
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_altitude
+units:         m
+long_name:     Surface Altitude
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        -500.
+valid_max:        12000.
+ok_min_mean_abs:  0.
+ok_max_mean_abs:  2000.
+!----------------------------------	
+!
+!
+!============
+variable_entry: sftlf
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: land_area_fraction
+units:         %
+long_name:     Land Area Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        0.0
+valid_max:        100.
+ok_min_mean_abs:  20.
+ok_max_mean_abs:  40.
+!----------------------------------	
+!
+!
+!============
+variable_entry: sftgif
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: land_ice_area_fraction
+units:         %
+long_name:     Fraction of Grid Cell Covered with Glacier
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        0.0
+valid_max:        100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: mrsofc
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: soil_moisture_content_at_field_capacity
+units:         kg m-2
+long_name:     Capacity of Soil to Store Water
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1c: Monthly-mean 3-d atmosphere data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction_in_atmosphere_layer
+units:          %
+cell_methods:   time: mean
+long_name:      Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        150.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: va
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: northward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Meridional Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -100.
+valid_max:        100.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  50.
+!----------------------------------	
+!
+!
+!============
+variable_entry: hus
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: specific_humidity
+units:         1
+cell_methods:  time: mean
+long_name:     Specific Humidity 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: wap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: lagrangian_tendency_of_air_pressure
+units:         Pa s-1
+cell_methods:  time: mean
+long_name:     Omega (=dp/dt) 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: zg
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: geopotential_height
+units:         m
+cell_methods:  time: mean
+long_name:     Geopotential Height 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: hur
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: relative_humidity
+units:         %
+cell_methods:  time: mean
+long_name:     Relative Humidity 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        0.
+valid_max:        100.
+ok_min_mean_abs:  1.
+ok_max_mean_abs:  99.
+!----------------------------------	
+!
+!
+!============
+variable_entry: tro3
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: mole_fraction_of_o3_in_air
+units:         1e-9
+cell_methods:  time: mean
+long_name:     Ozone Mole Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1d: Monthly-mean 3-d ISCCP simulator data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: clisccp
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: isccp_cloud_area_fraction
+units:         1
+cell_methods:  time: mean
+long_name:     Cloud Fraction as Calculated by the ISCCP Simulator
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure2 tau time
+valid_min:        0.0
+valid_max:        1.0
+ok_min_mean_abs:  0.001
+ok_max_mean_abs:  0.9
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1e: Monthly-mean 2-d and 3-d sulfate aerosol fields
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: trsul
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: mass_concentration_of_sulfate_aerosol_in_air 
+units:         1e-9 kg m-3
+cell_methods:  time: mean
+long_name:     Mass Concentration of Sulfate Aerosol
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure3 time
+!----------------------------------	
+!
+!
+!============
+variable_entry: trsult
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_content_of_sulfate_aerosol 
+units:         1e-6 kg m-2
+cell_methods:  time: mean
+long_name:     Sulfate Burden
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1f: Monthly-mean land surface fields and prescribed land surface characteristics
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: prveg
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: precipitation_flux_onto_canopy
+units:         kg m-2 s-1 
+cell_methods:  time: mean
+long_name:     Precipitation Intercepted by Vegetation Canopy
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!============
+variable_entry: evspsblveg
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: water_evaporation_flux_from_canopy
+units:         kg m-2 s-1 
+cell_methods:  time: mean
+long_name:     Evaporation from Vegetation Canopy
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!============
+variable_entry: zmla
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_boundary_layer_thickness
+units:         m
+cell_methods:  time: mean
+long_name:     Atmospheric Boundary Layer Thickness
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!============
+variable_entry: rootd
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: root_depth
+units:         m
+long_name:     Root Depth
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+!----------------------------------	
+!
+!
+!============
+variable_entry: tasmin
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: minimum within days time: mean over days
+long_name:     Daily Minimum Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+!----------------------------------	
+!
+!
+!============
+variable_entry: tasmax
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: maximum within days time: mean over days
+long_name:     Daily Miximum Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+!----------------------------------	
+!
+!
diff --git a/Test/IPCC_table_A3 b/Test/IPCC_table_A3
new file mode 100644
index 0000000..9492267
--- /dev/null
+++ b/Test/IPCC_table_A3
@@ -0,0 +1,545 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A3    ! table id
+table_date:   17 November 2004 ! date this table was constructed
+required_global_attributes: creation_date tracking_id model_id forcing
+
+modeling_realm:	      atm
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment' '2xco2'
+expt_id_ok:   'AMIP experiment'
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval: 0.125    ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate), but this is ignored if set to 0.                   
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!bounds_requested:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+
+! ??? What about climatological data???
+!
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------	
+!
+!
+!============
+axis_entry: time1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals
+forbidden: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+out_name:         time
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------	
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 
+requested:         30000. 25000. 20000. 15000. 10000.  7000.  5000.
+requested:          3000.  2000.  1000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A3: 3-bourly 2-d atmosphere data 
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+long_name:       Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1 height1
+valid_min:        185.
+valid_max:        350.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+long_name:     Surface Latent Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+positive:         up
+valid_min:        -1000.
+valid_max:        2000.
+ok_min_mean_abs:  50.
+ok_max_mean_abs:  120.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfss
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_sensible_heat_flux
+units:         W m-2
+long_name:     Surface Sensible Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_longwave_flux_in_air
+units:         W m-2
+long_name:     Surface Downwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+positive:         down
+valid_min:        20.
+valid_max:        600.
+ok_min_mean_abs:  300.
+ok_max_mean_abs:  370.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_longwave_flux_in_air
+units:         W m-2
+long_name:     Surface Upwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+positive:         up
+valid_min:        50.
+valid_max:        900.
+ok_min_mean_abs:  250.
+ok_max_mean_abs:  450.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_shortwave_flux_in_air
+units:         W m-2
+long_name:     Surface Downwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+positive:         down
+valid_min:        0.
+valid_max:        1400.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_shortwave_flux_in_air
+units:         W m-2
+long_name:     Surface Upwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time1
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
diff --git a/Test/IPCC_test_table_A b/Test/IPCC_test_table_A
new file mode 100644
index 0000000..e9cb7ad
--- /dev/null
+++ b/Test/IPCC_test_table_A
@@ -0,0 +1,1023 @@
+cmor_version: 1.0         ! version of CMOR that can read this table
+cf_version:   1.3         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   23 October 2008 ! date this table was constructed
+baseURL: http://www-pcmdi.llnl.gov/
+
+modeling_realm:	      atm
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)' '20c3m'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment'  '2xco2'
+expt_id_ok:   'AMIP experiment'
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute
+
+! global attributes: Conventions (cf_version in here), table_id, project_id,
+! institution, experiment_id, source, calendar: are always required anyway 
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: time_clim
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+climatology:      yes
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        10000. 20000. 30000. 40000. 50000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+convert_to:       standard_hybrid_sigma
+z_factors:        ptop: ptop sigma: sigma ps: ps
+z_bounds_factors: ptop: ptop sigma: sigma_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: az b: bz orog: orog
+z_bounds_factors: a: az_bnds b: bz_bnds orog: orog
+!----------------------------------		
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! Vertical dimensionless coordinate variables:
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: p0
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       reference pressure for hybrid sigma coordinate 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!IPCC_table_A1
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer bounds
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az
+!============
+!
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate A coefficient for layer
+units:           m
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz
+!============
+!
+!    Override default argument specifications for cmor_variable 
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+units:           m
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: orog
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_altitude
+units:         m
+long_name:     Surface Altitude
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        -500.
+valid_max:        12000.
+ok_min_mean_abs:  0.
+ok_max_mean_abs:  2000.
+!----------------------------------	
+!
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          1.e-4
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------	
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+deflate: 9
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  260.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tas_diurnal
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean within days time: mean over days
+long_name:       Diurnal Cycle Climatology for Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time_clim height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time depth1
+!----------------------------------	 
+!
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name: hfls
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.48e5
+valid_max:        1.1e5
+ok_min_mean_abs:  0.97e5
+ok_max_mean_abs:  1.0e5
+!----------------------------------		
+! 
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        150.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------	
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction
+units:          %
+cell_methods:   time: mean
+long_name:      Total Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
diff --git a/Test/IPCC_test_table_As b/Test/IPCC_test_table_As
new file mode 100644
index 0000000..a726042
--- /dev/null
+++ b/Test/IPCC_test_table_As
@@ -0,0 +1,14624 @@
+cmor_version: 1.0         ! version of CMOR that can read this table
+cf_version:   1.3         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   23 October 2008 ! date this table was constructed
+baseURL: http://www-pcmdi.llnl.gov/
+
+modeling_realm: 	      land
+
+expt_id_ok:   'pre-industrial control experiment'  'preind'
+expt_id_ok:   'present-day control experiment'  'present'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)' '20c3m'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 'ccce'
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments 'sresa2'
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    'sresa1b'
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)' 'sres1b'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)' '1pct2x'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)' '1pct4x'
+expt_id_ok:   'slab ocean control experiment' 'slab'
+expt_id_ok:   '2xCO2 equilibrium experiment' '2xco2'
+expt_id_ok:   'AMIP experiment' 'amip'
+
+required_global_attributes: creation_date tracking_id forcing model_id initialization_method ! space separated required global attribute
+
+! global attributes: Conventions (cf_version in here), table_id, project_id,
+! institution, experiment_id, source, calendar: are always required anyway 
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: time_clim
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+climatology:      yes
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        10000. 20000. 30000. 40000. 50000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+convert_to:       standard_hybrid_sigma
+z_factors:        ptop: ptop sigma: sigma ps: ps
+z_bounds_factors: ptop: ptop sigma: sigma_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: az b: bz orog: orog
+z_bounds_factors: a: az_bnds b: bz_bnds orog: orog
+!----------------------------------		
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! Vertical dimensionless coordinate variables:
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: p0
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       reference pressure for hybrid sigma coordinate 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!IPCC_table_A1
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer bounds
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az
+!============
+!
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate A coefficient for layer
+units:           m
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz
+!============
+!
+!    Override default argument specifications for cmor_variable 
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+units:           m
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: orog
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_altitude
+units:         m
+long_name:     Surface Altitude
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        -500.
+valid_max:        12000.
+ok_min_mean_abs:  0.
+ok_max_mean_abs:  2000.
+!----------------------------------	
+!
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          1.e-4
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------	
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+deflate: 9
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  260.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tas_diurnal
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean within days time: mean over days
+long_name:       Diurnal Cycle Climatology for Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time_clim height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time depth1
+!----------------------------------	 
+!
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name: hfls
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.48e5
+valid_max:        1.1e5
+ok_min_mean_abs:  0.97e5
+ok_max_mean_abs:  1.0e5
+!----------------------------------		
+! 
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        150.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------	
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction
+units:          %
+cell_methods:   time: mean
+long_name:      Total Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls0 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls0 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls1 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls1 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls2 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls2 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls3 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls3 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls4 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls4 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls5 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls5 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls6 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls6 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls7 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls7 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls8 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls8 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls9 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls9 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls10 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls10 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls11 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls11 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls12 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls12 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls13 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls13 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls14 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls14 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls15 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls15 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls16 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls16 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls17 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls17 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls18 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls18 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls19 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls19 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls20 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls20 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls21 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls21 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls22 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls22 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls23 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls23 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls24 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls24 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls25 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls25 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls26 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls26 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls27 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls27 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls28 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls28 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls29 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls29 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls30 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls30 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls31 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls31 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls32 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls32 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls33 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls33 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls34 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls34 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls35 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls35 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls36 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls36 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls37 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls37 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls38 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls38 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls39 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls39 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls40 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls40 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls41 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls41 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls42 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls42 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls43 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls43 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls44 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls44 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls45 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls45 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls46 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls46 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls47 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls47 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls48 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls48 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls49 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls49 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls50 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls50 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls51 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls51 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls52 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls52 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls53 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls53 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls54 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls54 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls55 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls55 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls56 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls56 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls57 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls57 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls58 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls58 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls59 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls59 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls60 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls60 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls61 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls61 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls62 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls62 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls63 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls63 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls64 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls64 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls65 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls65 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls66 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls66 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls67 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls67 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls68 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls68 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls69 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls69 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls70 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls70 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls71 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls71 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls72 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls72 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls73 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls73 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls74 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls74 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls75 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls75 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls76 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls76 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls77 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls77 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls78 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls78 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls79 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls79 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls80 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls80 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls81 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls81 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls82 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls82 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls83 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls83 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls84 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls84 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls85 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls85 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls86 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls86 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls87 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls87 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls88 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls88 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls89 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls89 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls90 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls90 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls91 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls91 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls92 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls92 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls93 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls93 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls94 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls94 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls95 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls95 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls96 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls96 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls97 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls97 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls98 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls98 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls99 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls99 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls100 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls100 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls101 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls101 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls102 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls102 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls103 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls103 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls104 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls104 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls105 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls105 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls106 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls106 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls107 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls107 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls108 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls108 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls109 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls109 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls110 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls110 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls111 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls111 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls112 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls112 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls113 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls113 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls114 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls114 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls115 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls115 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls116 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls116 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls117 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls117 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls118 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls118 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls119 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls119 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls120 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls120 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls121 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls121 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls122 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls122 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls123 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls123 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls124 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls124 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls125 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls125 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls126 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls126 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls127 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls127 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls128 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls128 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls129 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls129 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls130 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls130 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls131 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls131 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls132 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls132 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls133 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls133 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls134 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls134 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls135 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls135 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls136 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls136 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls137 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls137 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls138 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls138 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls139 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls139 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls140 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls140 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls141 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls141 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls142 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls142 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls143 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls143 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls144 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls144 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls145 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls145 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls146 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls146 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls147 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls147 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls148 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls148 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls149 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls149 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls150 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls150 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls151 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls151 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls152 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls152 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls153 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls153 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls154 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls154 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls155 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls155 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls156 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls156 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls157 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls157 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls158 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls158 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls159 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls159 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls160 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls160 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls161 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls161 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls162 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls162 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls163 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls163 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls164 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls164 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls165 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls165 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls166 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls166 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls167 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls167 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls168 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls168 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls169 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls169 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls170 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls170 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls171 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls171 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls172 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls172 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls173 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls173 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls174 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls174 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls175 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls175 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls176 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls176 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls177 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls177 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls178 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls178 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls179 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls179 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls180 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls180 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls181 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls181 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls182 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls182 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls183 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls183 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls184 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls184 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls185 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls185 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls186 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls186 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls187 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls187 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls188 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls188 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls189 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls189 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls190 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls190 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls191 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls191 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls192 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls192 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls193 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls193 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls194 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls194 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls195 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls195 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls196 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls196 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls197 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls197 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls198 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls198 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls199 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls199 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls200 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls200 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls201 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls201 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls202 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls202 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls203 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls203 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls204 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls204 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls205 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls205 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls206 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls206 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls207 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls207 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls208 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls208 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls209 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls209 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls210 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls210 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls211 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls211 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls212 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls212 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls213 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls213 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls214 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls214 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls215 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls215 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls216 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls216 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls217 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls217 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls218 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls218 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls219 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls219 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls220 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls220 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls221 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls221 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls222 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls222 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls223 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls223 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls224 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls224 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls225 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls225 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls226 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls226 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls227 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls227 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls228 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls228 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls229 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls229 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls230 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls230 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls231 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls231 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls232 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls232 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls233 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls233 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls234 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls234 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls235 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls235 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls236 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls236 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls237 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls237 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls238 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls238 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls239 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls239 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls240 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls240 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls241 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls241 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls242 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls242 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls243 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls243 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls244 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls244 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls245 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls245 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls246 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls246 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls247 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls247 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls248 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls248 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls249 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls249 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls250 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls250 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls251 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls251 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls252 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls252 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls253 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls253 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls254 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls254 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls255 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls255 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls256 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls256 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls257 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls257 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls258 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls258 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls259 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls259 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls260 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls260 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls261 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls261 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls262 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls262 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls263 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls263 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls264 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls264 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls265 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls265 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls266 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls266 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls267 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls267 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls268 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls268 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls269 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls269 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls270 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls270 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls271 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls271 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls272 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls272 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls273 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls273 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls274 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls274 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls275 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls275 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls276 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls276 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls277 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls277 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls278 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls278 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls279 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls279 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls280 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls280 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls281 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls281 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls282 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls282 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls283 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls283 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls284 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls284 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls285 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls285 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls286 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls286 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls287 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls287 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls288 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls288 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls289 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls289 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls290 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls290 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls291 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls291 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls292 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls292 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls293 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls293 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls294 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls294 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls295 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls295 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls296 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls296 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls297 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls297 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls298 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls298 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls299 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls299 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls300 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls300 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls301 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls301 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls302 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls302 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls303 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls303 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls304 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls304 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls305 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls305 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls306 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls306 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls307 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls307 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls308 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls308 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls309 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls309 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls310 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls310 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls311 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls311 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls312 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls312 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls313 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls313 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls314 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls314 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls315 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls315 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls316 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls316 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls317 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls317 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls318 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls318 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls319 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls319 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls320 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls320 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls321 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls321 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls322 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls322 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls323 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls323 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls324 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls324 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls325 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls325 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls326 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls326 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls327 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls327 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls328 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls328 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls329 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls329 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls330 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls330 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls331 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls331 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls332 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls332 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls333 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls333 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls334 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls334 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls335 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls335 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls336 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls336 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls337 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls337 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls338 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls338 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls339 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls339 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls340 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls340 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls341 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls341 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls342 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls342 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls343 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls343 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls344 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls344 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls345 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls345 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls346 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls346 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls347 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls347 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls348 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls348 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls349 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls349 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls350 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls350 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls351 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls351 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls352 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls352 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls353 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls353 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls354 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls354 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls355 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls355 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls356 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls356 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls357 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls357 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls358 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls358 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls359 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls359 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls360 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls360 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls361 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls361 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls362 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls362 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls363 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls363 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls364 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls364 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls365 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls365 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls366 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls366 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls367 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls367 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls368 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls368 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls369 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls369 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls370 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls370 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls371 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls371 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls372 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls372 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls373 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls373 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls374 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls374 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls375 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls375 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls376 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls376 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls377 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls377 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls378 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls378 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls379 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls379 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls380 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls380 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls381 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls381 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls382 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls382 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls383 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls383 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls384 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls384 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls385 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls385 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls386 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls386 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls387 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls387 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls388 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls388 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls389 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls389 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls390 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls390 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls391 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls391 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls392 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls392 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls393 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls393 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls394 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls394 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls395 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls395 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls396 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls396 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls397 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls397 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls398 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls398 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: hfls399 
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name:  hfls399 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
diff --git a/Test/IPCC_test_table_Grids b/Test/IPCC_test_table_Grids
new file mode 100644
index 0000000..95b89bd
--- /dev/null
+++ b/Test/IPCC_test_table_Grids
@@ -0,0 +1,192 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table Grids    ! table id
+table_date:   25 October 2007 ! date this table was constructed
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment'
+expt_id_ok:   'AMIP experiment'
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+!
+!
+!============
+mapping_entry: crap
+!============
+parameter: false_easting
+parameter: false_northing
+coordinates: rlon rlat
+!
+!============
+axis_entry: x
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    projection_x_coordinate
+units:            ?
+long_name:        x coordinate of projection
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!
+!============
+axis_entry: y
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    projection_y_coordinate
+units:            ?
+long_name:        y coordinate of projection
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!
+!============
+axis_entry: grid_latitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    grid_latitude
+units:            degrees
+long_name:        latitude in rotated pole grid
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         rlat
+!
+!============
+axis_entry: grid_longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    grid_longitude
+units:            degrees
+long_name:        longitude in rotated pole grid
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         rlon
+!
+!============
+axis_entry: vertices
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    vertices
+units:            1
+long_name:        vertices
+!
+!============
+variable_entry: longitude
+!============
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+long_name:        longitude coordinate
+dimensions:	  longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        -180.        ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.
+valid_max:        180.         !  see above comment.
+!----------------------------------	
+!
+!
+!============
+variable_entry: latitude
+!============
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+long_name:        latitude coordinate
+dimensions:	  longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.        
+valid_max:        90.
+!----------------------------------	
+!
+!
+!============
+variable_entry: vertices_longitude
+!============
+!----------------------------------	
+standard_name:    vertices_longitude
+units:            degrees_east
+long_name:        longitude vertices coordinate 
+dimensions:	  vertices longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         vertices_lon
+valid_min:        -180.        ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.
+valid_max:        180.         !  see above comment.
+!----------------------------------	
+!
+!
+!============
+variable_entry: vertices_latitude
+!============
+!----------------------------------	
+standard_name:    vertices_latitude
+units:            degrees_north
+long_name:        latitude vertices coordinate
+dimensions:	  vertices longitude latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         vertices_lat
+valid_min:        -90.        
+valid_max:        90.
+!----------------------------------	
+!
+!
diff --git a/Test/IPCC_test_table_O b/Test/IPCC_test_table_O
new file mode 100644
index 0000000..8a8fed6
--- /dev/null
+++ b/Test/IPCC_test_table_O
@@ -0,0 +1,287 @@
+cmor_version: 1.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table O1    ! table id
+table_date:   4 June 2004 ! date this table was constructed
+
+modeling_realm:	   atm
+
+expt_id_ok:   'climate of the 20th Century (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   'control experiment (for 20C3M)'
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'control experiment (for 1%/year CO2 run)'
+expt_id_ok:   '2xCO2 equilibrium experiment' '2xco2'
+expt_id_ok:   'control experiment (for 2xCO2 run)'
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+
+! ??? What about climatological data???
+!
+
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!
+!
+!============
+axis_entry: region
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: units cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    region
+long_name:        Ocean Basin 
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------
+coords_attrib:     geo_region
+type:             character
+requested:        atlantic_ocean indian_ocean pacific_ocean global_ocean
+!----------------------------------	
+!	
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!============
+variable_entry: hfogo
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   northward_ocean_heat_transport     
+units:           W
+cell_methods:    time: mean  longitude: sum
+long_name:       Northward Ocean Heat Transport
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       latitude region time
+valid_min:          -4.e15
+valid_max:          4.e15
+ok_min_mean_abs:    0.0
+ok_max_mean_abs:    4.e15
+!----------------------------------
diff --git a/Test/IPCC_test_table_S b/Test/IPCC_test_table_S
new file mode 100644
index 0000000..19f8247
--- /dev/null
+++ b/Test/IPCC_test_table_S
@@ -0,0 +1,691 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   25 October 2007 ! date this table was constructed  !Oct 20008 added axis - station data section
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment'
+expt_id_ok:   'AMIP experiment'
+
+required_global_attributes: creation_date tracking_id model_id ! space separated required global attribute
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------     
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------     
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------     
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------     
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------     
+!
+!
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: time_clim
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    time
+units:            days since ?
+axis:             T
+climatology:      yes
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        10000. 20000. 30000. 40000. 50000.
+!----------------------------------     
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------     
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------     
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!           
+!
+!
+!============
+axis_entry: station
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: units cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------     
+standard_name:    station
+long_name:        station number 
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------
+coords_attrib:    station_number
+type:             integer
+!requested:        atlantic_ocean indian_ocean pacific_ocean global_ocean
+!----------------------------------     
+!       
+
+
+
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! Vertical dimensionless coordinate variables:
+!
+! ***************************************************************
+!
+!  
+! 
+!============
+variable_entry: longitude
+!============
+!----------------------------------     
+standard_name:    longitude
+units:            degrees_east
+long_name:        longitude coordinate
+dimensions:       station
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.
+valid_max:        360.         !  see above comment.
+!----------------------------------     
+!
+!
+!============
+variable_entry: latitude
+!============
+!----------------------------------     
+standard_name:    latitude
+units:            degrees_north
+long_name:        latitude coordinate
+dimensions:       station
+!----------------------------------     
+!
+! Additional axis information:
+!----------------------------------     
+out_name:         lat
+valid_min:        -90.        
+valid_max:        90.
+!----------------------------------     
+!
+
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------     
+! 
+!
+!============
+variable_entry: orog
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name: surface_altitude
+units:         m
+long_name:     Surface Altitude
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station
+valid_min:        -500.
+valid_max:        12000.
+ok_min_mean_abs:  0.
+ok_max_mean_abs:  2000.
+!----------------------------------     
+!
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:         station time
+valid_min:          0.0
+valid_max:          1.e-4
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------     
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       longitude latitude time
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  260.
+ok_max_mean_abs:  300.
+!----------------------------------     
+! 
+!
+!============
+variable_entry: tas_diurnal
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean within days time: mean over days
+long_name:       Diurnal Cycle Climatology for Surface Air Temperature
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station time_clim height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------     
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station time depth1
+!----------------------------------      
+!
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------     
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+!dimensions:       longitude latitude time
+dimensions:       station time
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------     
+!
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station time
+valid_min:        0.48e5
+valid_max:        1.1e5
+ok_min_mean_abs:  0.97e5
+ok_max_mean_abs:  1.0e5
+!----------------------------------             
+! 
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------     
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:       station pressure time
+valid_min:        150.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------     
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------     
+standard_name:  cloud_area_fraction
+units:          %
+cell_methods:   time: mean
+long_name:      Total Cloud Fraction
+!----------------------------------     
+!
+! Additional variable information:
+!----------------------------------     
+dimensions:         station zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------     
+!
+!
diff --git a/Test/Sophie_Table b/Test/Sophie_Table
new file mode 100644
index 0000000..97ea398
--- /dev/null
+++ b/Test/Sophie_Table
@@ -0,0 +1,1021 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.3         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   23 October 2008 ! date this table was constructed
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment'
+expt_id_ok:   'AMIP experiment'
+
+required_global_attributes: creation_date tracking_id forcing model_id ! space separated required global attribute
+
+! global attributes: Conventions (cf_version in here), table_id, project_id,
+! institution, experiment_id, source, calendar: are always required anyway 
+magic_number: -1          ! used to check whether this file has been 
+                         !   altered from the official version.
+                         !   should be set to number of non-blank 
+                         !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                         !   samples (in units of the output time 
+                         !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                         !   in arrays output by netCDF as 32-bit IEEE 
+                         !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                         !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                         !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                         !  (default=1.e-3, which is used in the formula:
+                         !     eps =  MIN(( tol*interval between grid-points)
+                         !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                            !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                              ! (where n is an integer) to ensure 
+                              !  longitudes are in proper range.  The
+                              !  data will also be rearranged 
+                              !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: time_clim
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+climatology:      yes
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        10000. 20000. 30000. 40000. 50000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+convert_to:       standard_hybrid_sigma
+z_factors:        ptop: ptop sigma: sigma ps: ps
+z_bounds_factors: ptop: ptop sigma: sigma_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: az b: bz orog: orog
+z_bounds_factors: a: az_bnds b: bz_bnds orog: orog
+!----------------------------------		
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! Vertical dimensionless coordinate variables:
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: p0
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       reference pressure for hybrid sigma coordinate 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!IPCC_table_A1
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer bounds
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az
+!============
+!
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate A coefficient for layer
+units:           m
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz
+!============
+!
+!    Override default argument specifications for cmor_variable 
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+units:           m
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: orog
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_altitude
+units:         m
+long_name:     Surface Altitude
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        -500.
+valid_max:        12000.
+ok_min_mean_abs:  0.
+ok_max_mean_abs:  2000.
+!----------------------------------	
+!
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          1.e-4
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------	
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+deflate: 9
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  260.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tas_diurnal
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean within days time: mean over days
+long_name:       Diurnal Cycle Climatology for Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time_clim height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time depth1
+!----------------------------------	 
+!
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+!cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+modeling_realm:   atmosphere
+comment: whatever dude
+out_name: hfls
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:       longitude latitude time
+dimensions:       longitude latitude
+positive:         up
+valid_min:        -50.
+valid_max:        300.
+ok_min_mean_abs:  10.
+ok_max_mean_abs:  120.
+!shuffle:          1
+!deflate:          1
+!deflate_level:    9
+!----------------------------------	
+!
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.48e5
+valid_max:        1.1e5
+ok_min_mean_abs:  0.97e5
+ok_max_mean_abs:  1.0e5
+!----------------------------------		
+! 
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        140.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------	
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction
+units:          %
+cell_methods:   time: mean
+long_name:      Total Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
diff --git a/Test/alejandro.txt b/Test/alejandro.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Test/alejandro.txt
@@ -0,0 +1 @@
+0
diff --git a/Test/alejandro_1.txt b/Test/alejandro_1.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Test/alejandro_1.txt
@@ -0,0 +1 @@
+1
diff --git a/Test/alejandro_2.txt b/Test/alejandro_2.txt
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/Test/alejandro_2.txt
@@ -0,0 +1 @@
+2
diff --git a/Test/check_results.py b/Test/check_results.py
new file mode 100644
index 0000000..96e1bb5
--- /dev/null
+++ b/Test/check_results.py
@@ -0,0 +1,51 @@
+from out_files import out
+from in_files import input_tables
+import sys,os
+
+import cmor
+
+test = sys.argv[1]
+
+test = os.path.split(test)[1]
+if test[-4:].lower()=='.f90':
+    test=test[:-4]
+
+print 'Checking results for:',test
+
+outfiles = out.get(test,[])
+intables = input_tables.get(test,['IPCC_test_table_A',])
+
+
+class CMORResultCheckError(Exception):
+    def __init__(self,args=None):
+        self.args=args
+
+nfiles = 0
+
+print 'files:',outfiles
+gotfiles=[]
+missing=[]
+for f in outfiles:
+    if f is None:
+        print 'No checking'
+        sys.exit()
+    tables=[]
+    for t in intables:
+        tables.append(os.path.join("Test",t))
+    tbl = tables.pop(0)
+    if len(tables)==0:
+        tables=[None,]
+    fnm = os.path.join("Test",f)
+    if os.path.exists(fnm):
+        nfiles+=1
+        gotfiles.append(fnm)
+        print 'Checking output file:',f
+        cmor.checkCMOR(sys.stdout,fnm,tbl,other_tables=tables)
+        print '----------------------- Success ------------------------------'
+        os.remove(fnm)
+    else:
+        missing.append(fnm)
+if nfiles == 0 and outfiles!=[]:
+    raise CMORResultCheckError,["Error could not find any output file for test: Test/%s.f90" % (test),]
+elif nfiles!=len(outfiles):
+    raise CMORResultCheckError,["Error checking output files for test: Test/%s.f90 we could only find %i files when %i were expected.\n\n Expected files: \n\t%s\n\nPresent files: \n\t%s\n\nMissing files: \n\t%s\n" % (test,nfiles,len(outfiles),repr(outfiles),repr(gotfiles),repr(missing)),]
diff --git a/Test/climatology_test_code.f90 b/Test/climatology_test_code.f90
new file mode 100644
index 0000000..ae1a15a
--- /dev/null
+++ b/Test/climatology_test_code.f90
@@ -0,0 +1,371 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+      
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: time_bnds
+
+    INTEGER :: i
+    
+    DO i=1,SIZE(time)
+       time(i) = (it-1)*30.+ (i-.5)/SIZE(time)
+       time_bnds(1,i) = (it-1)*30.+ (i-1)*1.0/SIZE(time)
+       time_bnds(2,i) = (it-1)*30.+ i*1.0/SIZE(time) + 29.
+       print*, i,time_bnds(1,i),time(i),time_bnds(2,i)
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:,:) :: field
+    
+    INTEGER :: i, j, k,l
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+
+    factor = 2.2
+    offset = -220.
+    
+    DO k=1,SIZE(field,4)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             DO l=1,SIZE(field, 3)
+                field(i,size(field,2)+1-j,l,k) = ((k-1)*0.005 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+             END DO
+          END DO
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n2d = 1       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                  varin2d=(/  'TSURF' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=1), DIMENSION(n2d) :: &
+                          units2d=(/ '1'/)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  '    ' /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=10), DIMENSION(n2d) :: &
+                        entry2d = (/ 'co2Clim' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  REAL, DIMENSION(lon,lat,lev,24) :: data2d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(24) :: time
+  DOUBLE PRECISION, DIMENSION(2,24):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  INTEGER :: ilon, ilat, ipres, itim
+  double precision bt
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+
+  bt=0.
+      plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')!,logfile="climatology_test_code.LOG")
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id = 'GICCM1', &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+
+  !  Define all axes that will be needed
+
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time2',           &
+       units='days since 2030-1-1',  &
+       length=ntimes*24                &
+       )
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+     call read_time(it, time, bnds_time)
+
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        print*, 'CALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL'
+        print*, 'times:',time(1),time(2)
+        print*, 'btimes:',bnds_time(1,1),bnds_time(2,1),bnds_time(1,2),bnds_time(2,2)
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 24,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing climatology test Table A ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/climatology_test_table_A b/Test/climatology_test_table_A
new file mode 100644
index 0000000..cd5be09
--- /dev/null
+++ b/Test/climatology_test_table_A
@@ -0,0 +1,296 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.3         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   22 October 2008 ! date this table was last updated
+
+modeling_realm: 	      atm
+
+required_global_attributes: creation_date tracking_id model_id forcing
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment' '2xco2'
+expt_id_ok:   'AMIP experiment'
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!requested_bounds:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+!
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+climatology:      yes
+long_name:        time
+!----------------------------------
+!
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!	
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+!============
+variable_entry: tasDiurnal
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean within days time: mean over days
+long_name:       Diurnal Cycle Climatology for Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        200.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
diff --git a/Test/cmor_speed_and_compression.py b/Test/cmor_speed_and_compression.py
new file mode 100644
index 0000000..6a055c9
--- /dev/null
+++ b/Test/cmor_speed_and_compression.py
@@ -0,0 +1,161 @@
+import cmor,numpy,sys,os
+try:
+    import cdms2
+    cdms2.setNetcdfShuffleFlag(0)
+    cdms2.setNetcdfDeflateFlag(0)
+    cdms2.setNetcdfDeflateLevelFlag(0)
+except:
+    print "This test code needs a recent cdms2 interface for i/0"
+    sys.exit()
+
+if len(sys.argv)>1:
+    level = int(sys.argv[1])
+else:
+    level=int(os.environ.get("DEFLATE_LEVEL",0))
+
+if len(sys.argv)>2:
+    shuffle= int(sys.argv[2])
+else:
+    shuffle=int(os.environ.get("SHUFFLE",0))
+
+if level==0:
+    deflate = 0
+else:
+    deflate = 1
+
+f=open("Test/speed_test_table_A")
+s=f.read()
+f.close()
+s=s.replace("${DEFLATE_LEVEL}",str(level))
+s=s.replace("${DEFLATE}",str(deflate))
+s=s.replace("${SHUFFLE}",str(shuffle))
+f=open("mytable","w")
+f.write(s)
+f.close()
+
+cmor.setup(inpath="Test",set_verbosity=cmor.CMOR_NORMAL, netcdf_file_action = cmor.CMOR_REPLACE, exit_control = cmor.CMOR_EXIT_ON_MAJOR);
+cmor.dataset(
+    outpath = "Test",
+    experiment_id = "historical",
+    institution = "GICC (Generic International Climate Center, Geneva, Switzerland)",
+    source = "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+    calendar = "standard",
+    realization = 1,
+    contact = "Charles Doutriaux (doutriaux1 at llnl.gov)",
+    history = "Test for speed and compression.",
+    comment = "NetCDF4 vs NetCDF3 testing",
+    references = "http://cdat.sf.net",
+    leap_year=0,
+    leap_month=0,
+    institute_id="PCMDI",
+    month_lengths=None,model_id="GICCM1",forcing="SO",parent_experiment_id="lgm",branch_time=4.)
+
+tables=[]
+tables.append(cmor.load_table("mytable"))
+print 'Tables ids:',tables
+
+
+## read in data, just one slice
+f=cdms2.open(sys.prefix+'/sample_data/tas_dnm-95a_1984.01-1984.12.nc')
+s=f("tas",time=slice(0,1),squeeze=1)
+
+ntimes = 12
+
+myaxes=numpy.arange(10)
+myvars=numpy.arange(10)
+myaxes[0] = cmor.axis(table_entry = 'latitude', 
+                      units = 'degrees_north', 
+                      coord_vals = s.getLatitude()[:],cell_bounds=s.getLatitude().getBounds())
+myaxes[1] = cmor.axis(table_entry = 'longitude', 
+                      units = 'degrees_north', 
+                      coord_vals = s.getLongitude()[:],cell_bounds=s.getLongitude().getBounds())
+
+
+
+myaxes[3] = cmor.axis(table_entry = 'time',
+                      units = 'months since 1980',
+                      coord_vals = numpy.arange(ntimes), cell_bounds=numpy.arange(ntimes+1))
+
+pass_axes = [myaxes[2],myaxes[0],myaxes[1]]
+
+myvars[0] = cmor.variable( table_entry = 'tas',
+                           units = 'K',
+                           axis_ids = pass_axes,
+                           original_name = 'CLT',
+                           history = 'no history',
+                           comment = 'testing speed'
+                           )
+
+
+import time,MV2
+st = time.time()
+totcmor=0
+totcdms=0
+maxcmor=0
+mincmor=1000
+maxcdms=0
+mincdms=1000
+c0=st
+s2=s*1
+sh=list(s.shape)
+sh.insert(0,1)
+s2=MV2.reshape(s2,sh)
+s2.setAxis(1,s.getLatitude())
+s2.setAxis(2,s.getLongitude())
+f=cdms2.open("Test/crap.nc","w")
+for i in range(ntimes):
+    #print 'Time:',i
+    cmor.write(myvars[0],s.filled(),1)
+    c=time.time()
+    #print 'cmor write time:',c-c0
+    totcmor+=c-c0
+    if maxcmor<c-c0:
+        maxcmor=c-c0
+    if mincmor>c-c0:
+        mincmor=c-c0
+    c0=c
+    t=cdms2.createAxis([i])
+    t.id='time'
+    t.units='months since 1980'
+    t.designateTime()
+    s2.setAxis(0,t)
+    f.write(s2,id='tas')
+    c=time.time()
+    #print 'cdms time:',c-c0
+    totcdms+=c-c0
+    if maxcdms<c-c0:
+        maxcdms=c-c0
+    if mincdms>c-c0:
+        mincdms=c-c0
+    c0=c
+f.close()
+cmor.close()
+
+import cdtime,os
+ltime = cdtime.reltime(ntimes-1,'month since 1980').tocomp()
+lcmor = os.stat("Test/CMIP5/output/PCMDI/GICCM1/historical/mon/atmos/tas/r1i1p1/tas_Amon_GICCM1_historical_r1i1p1_198001-%i%.2i.nc" % (ltime.year,ltime.month))[6]
+print 'level:',level,"shuffle:",shuffle
+print 'total cmor:',totcmor,mincmor,totcmor/ntimes,maxcmor,lcmor
+lcdms = os.stat("Test/crap.nc")[6]
+print 'total cdms:',totcdms,mincdms,totcdms/ntimes,maxcdms,lcdms
+print 'Size diff:',float(lcmor)/float(lcdms)
+print 'speed diff:', totcmor/totcdms
+
+if os.path.exists("summary.txt"):
+    f = open("summary.txt")
+    s=f.read()
+    f.close()
+    dic = eval(s)
+else:
+    dic = {}
+
+dic[(level,shuffle)]=(float(lcmor)/float(lcdms),totcmor/totcdms)
+
+for i in range(10):
+    a = dic.get((i,0),"N/A")
+    b = dic.get((i,1),"N/A")
+    print 'Level: ',i,"no suffle:",a,"shuffle",b
+f=open("summary.txt","w")
+f.write(repr(dic))
+f.close()
+
diff --git a/Test/cmor_speed_and_compression_01.py b/Test/cmor_speed_and_compression_01.py
new file mode 100644
index 0000000..f46d344
--- /dev/null
+++ b/Test/cmor_speed_and_compression_01.py
@@ -0,0 +1,151 @@
+import cmor,numpy,sys,os
+try:
+    import cdms2
+    cdms2.setNetcdfShuffleFlag(0)
+    cdms2.setNetcdfDeflateFlag(0)
+    cdms2.setNetcdfDeflateLevelFlag(0)
+except:
+    print "This test code needs a recent cdms2 interface for i/0"
+    sys.exit()
+
+if len(sys.argv)>1:
+    level = int(sys.argv[1])
+else:
+    level=int(os.environ.get("DEFLATE_LEVEL",0))
+
+if len(sys.argv)>2:
+    shuffle= int(sys.argv[2])
+else:
+    shuffle=int(os.environ.get("SHUFFLE",0))
+
+if level==0:
+    deflate = 0
+else:
+    deflate = 1
+
+f=open("Test/speed_test_table_A")
+s=f.read()
+f.close()
+s=s.replace("${DEFLATE_LEVEL}",str(level))
+s=s.replace("${DEFLATE}",str(deflate))
+s=s.replace("${SHUFFLE}",str(shuffle))
+f=open("mytable","w")
+f.write(s)
+f.close()
+
+cmor.setup(inpath="Test",set_verbosity=cmor.CMOR_NORMAL, netcdf_file_action = cmor.CMOR_REPLACE, exit_control = cmor.CMOR_EXIT_ON_MAJOR);
+cmor.dataset(
+    outpath = "Test",
+    experiment_id = "lgm",
+    institution = "GICC (Generic International Climate Center, Geneva, Switzerland)",
+    source = "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+    calendar = "standard",
+    realization = 1,
+    contact = "Charles Doutriaux (doutriaux1 at llnl.gov)",
+    history = "Test for speed and compression.",
+    comment = "NetCDF4 vs NetCDF3 testing",
+    references = "http://cdat.sf.net",
+    leap_year=0,
+    leap_month=0,
+    institute_id="PCMDI",
+    month_lengths=None,model_id="GICCM1",forcing="SO",parent_experiment_id="N/A",branch_time=0.)
+
+tables=[]
+tables.append(cmor.load_table("mytable"))
+print 'Tables ids:',tables
+
+
+## read in data, just one slice
+f=cdms2.open(sys.prefix+'/sample_data/tas_dnm-95a_1984.01-1984.12.nc')
+s=f("tas",time=slice(0,12),squeeze=1)
+
+ntimes = 12
+varout='tas'
+
+myaxes=numpy.arange(10)
+myvars=numpy.arange(10)
+myaxes[0] = cmor.axis(table_entry = 'latitude', 
+                      units = 'degrees_north', 
+                      coord_vals = s.getLatitude()[:],cell_bounds=s.getLatitude().getBounds())
+myaxes[1] = cmor.axis(table_entry = 'longitude', 
+                      units = 'degrees_north', 
+                      coord_vals = s.getLongitude()[:],cell_bounds=s.getLongitude().getBounds())
+
+
+
+myaxes[2] = cmor.axis(table_entry = 'time',
+                      units = s.getTime().units,
+                      coord_vals = s.getTime()[:],cell_bounds=s.getTime().getBounds())
+
+pass_axes = [myaxes[2],myaxes[0],myaxes[1]]
+
+myvars[0] = cmor.variable( table_entry = varout,
+                           units = s.units,
+                           axis_ids = pass_axes,
+                           original_name = s.id,
+                           history = 'no history',
+                           comment = 'testing speed'
+                           )
+
+
+import time,MV2
+st = time.time()
+totcmor=0
+totcdms=0
+maxcmor=0
+mincmor=1000
+maxcdms=0
+mincdms=1000
+c0=st
+f=cdms2.open("Test/crap.nc","w")
+#print 'Time:',i
+print s.filled().shape
+cmor.write(myvars[0],s.filled(),ntimes_passed=ntimes)
+c=time.time()
+#print 'cmor write time:',c-c0
+totcmor+=c-c0
+if maxcmor<c-c0:
+    maxcmor=c-c0
+if mincmor>c-c0:
+    mincmor=c-c0
+c0=c
+f.write(s,id=varout)
+c=time.time()
+#print 'cdms time:',c-c0
+totcdms+=c-c0
+if maxcdms<c-c0:
+    maxcdms=c-c0
+if mincdms>c-c0:
+    mincdms=c-c0
+c0=c
+f.close()
+cmor.close()
+
+import cdtime,os
+ltime = cdtime.reltime(ntimes-1,'month since 1980').tocomp()
+lcmor = os.stat("Test/CMIP5/output/PCMDI/GICCM1/lgm/mon/atmos/tas/r1i1p1/tas_Amon_GICCM1_lgm_r1i1p1_198401-198412.nc")[6]
+print 'level:',level,"shuffle:",shuffle
+print 'total cmor:',totcmor,mincmor,totcmor/ntimes,maxcmor,lcmor
+lcdms = os.stat("Test/crap.nc")[6]
+print 'total cdms:',totcdms,mincdms,totcdms/ntimes,maxcdms,lcdms
+print 'Size diff:',float(lcmor)/float(lcdms)
+print 'speed diff:', totcmor/totcdms
+
+if os.path.exists("summary.txt"):
+    f = open("summary.txt")
+    s=f.read()
+    f.close()
+    dic = eval(s)
+else:
+    dic = {}
+
+dic[(level,shuffle)]=(float(lcmor)/float(lcdms),totcmor/totcdms)
+
+for i in range(10):
+    a = dic.get((i,0),"N/A")
+    b = dic.get((i,1),"N/A")
+    print 'Level: ',i,"no suffle:",a,"shuffle",b
+f=open("summary.txt","w")
+f.write(repr(dic))
+f.close()
+
diff --git a/Test/cmor_speed_and_compression_02.py b/Test/cmor_speed_and_compression_02.py
new file mode 100644
index 0000000..ad0378a
--- /dev/null
+++ b/Test/cmor_speed_and_compression_02.py
@@ -0,0 +1,184 @@
+import cmor,numpy,sys,os
+try:
+    import cdms2
+except:
+    print "This test code needs cdms2 interface for i/0"
+    sys.exit()
+
+cdms2.setNetcdfShuffleFlag(0)
+cdms2.setNetcdfDeflateFlag(0)
+cdms2.setNetcdfDeflateLevelFlag(0)
+
+if len(sys.argv)>1:
+    level = int(sys.argv[1])
+else:
+    level=int(os.environ.get("DEFLATE_LEVEL",0))
+
+if len(sys.argv)>2:
+    shuffle= int(sys.argv[2])
+else:
+    shuffle=int(os.environ.get("SHUFFLE",0))
+
+if level==0:
+    deflate = 0
+else:
+    deflate = 1
+
+f=open("Test/speed_test_table_A")
+s=f.read()
+f.close()
+s=s.replace("${DEFLATE_LEVEL}",str(level))
+s=s.replace("${DEFLATE}",str(deflate))
+s=s.replace("${SHUFFLE}",str(shuffle))
+f=open("mytable","w")
+f.write(s)
+f.close()
+
+cmor.setup(inpath="Test",set_verbosity=cmor.CMOR_NORMAL, netcdf_file_action = cmor.CMOR_REPLACE, exit_control = cmor.CMOR_EXIT_ON_MAJOR);
+cmor.dataset(
+    outpath = "Test",
+    experiment_id = "2xCO2 equilibrium experiment",
+    institution = "GICC (Generic International Climate Center, Geneva, Switzerland)",
+    source = "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+    calendar = "standard",
+    realization = 1,
+    contact = "Charles Doutriaux (doutriaux1 at llnl.gov)",
+    history = "Test for speed and compression.",
+    comment = "NetCDF4 vs NetCDF3 testing",
+    references = "http://cdat.sf.net",
+    leap_year=0,
+    leap_month=0,
+    month_lengths=None,model_id="pcmdi-09a",forcing="co2")
+
+tables=[]
+tables.append(cmor.load_table("mytable"))
+print 'Tables ids:',tables
+
+
+## read in data, just one slice
+var='tos'
+#f=cdms2.open('/export/ipcc/20c3m/atm/3h/tas/miroc3_2_medres/run1/tas_A3.nc')
+#f=cdms2.open('/export/ipcc/20c3m/atm/3h/pr/miroc3_2_medres/run1/pr_A3.nc')
+f=cdms2.open('/export/ipcc/20c3m/ocn/mo/tos/miroc3_2_medres/run1/tos_O1_1934_2000.nc')
+s=f[var]
+
+ntimes = s.shape[0]
+ntimes=100
+Tim = s.getTime().clone()
+myaxes=numpy.arange(10)
+myvars=numpy.arange(10)
+try:
+    missing_value = s.missing_value[0]
+except:
+    try:
+        missing_value=s.missing_value
+    except:
+        missing_value=None
+
+print 'Missing:',type(missing_value),missing_value
+#missing_value = -999.
+myaxes[0] = cmor.axis(table_entry = 'latitude', 
+                      units = 'degrees_north', 
+                      coord_vals = s.getLatitude()[:])
+myaxes[1] = cmor.axis(table_entry = 'longitude', 
+                      units = 'degrees_north', 
+                      coord_vals = s.getLongitude()[:])
+
+
+
+myaxes[2] = cmor.axis(table_entry = 'time',
+                      units = Tim.units,
+                      coord_vals = Tim[:ntimes])
+
+pass_axes = [myaxes[2],myaxes[0],myaxes[1]]
+
+myvars[0] = cmor.variable( table_entry = var,
+                           units = s.units,
+                           axis_ids = pass_axes,
+                           original_name = var,
+                           history = 'no history',
+                           comment = 'testing speed',
+                           missing_value=missing_value,
+                           tolerance = 1.e-2
+                           )
+
+
+import time,MV2
+st = time.time()
+totcmor=0
+totcdms=0
+maxcmor=0
+mincmor=1000
+maxcdms=0
+mincdms=1000
+c0=st
+f=cdms2.open("Test/crap.nc","w")
+step=10
+for i in range(0,ntimes,step):
+    print 'Time:',i
+    j1=i
+    j2=i+step
+    cmor.write(myvars[0],s[j1:j2].filled(),step,file_suffix="speed-comp-02")
+    c=time.time()
+    #print 'cmor write time:',c-c0
+    totcmor+=c-c0
+    if maxcmor<c-c0:
+        maxcmor=c-c0
+    if mincmor>c-c0:
+        mincmor=c-c0
+    c0=c
+    s2=s[j1:j2]
+    sh=list(s2.shape)
+    if len(sh)==2:
+        sh.insert(0,1)
+        s2=MV2.reshape(s2,sh)
+        s2.setAxis(-1,s.getLongitude())
+        s2.setAxis(-2,s.getLatitude())
+        t=cdms2.createAxis([Tim[i],])
+        t.id='time'
+        t.units=Tim.units
+        t.designateTime()
+        s2.setAxis(0,t)
+    f.write(s2,id=var)
+    c=time.time()
+    #print 'cdms time:',c-c0
+    totcdms+=c-c0
+    if maxcdms<c-c0:
+        maxcdms=c-c0
+    if mincdms>c-c0:
+        mincdms=c-c0
+    c0=c
+f.close()
+cmor.close()
+
+import cdtime,os
+ltime = cdtime.reltime(Tim[ntimes-1],Tim.units).tocomp()
+ftime = cdtime.reltime(Tim[0],Tim.units).tocomp()
+print ftime,ltime
+print (var,var,ftime.year,ftime.month,ltime.year,ltime.month)
+lcmor = os.stat("Test/IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-09a/mon/REALM/%s/r1/%s_A1_pcmdi-09a_r1_%i%.2i-%i%.2i_speed-comp-02.nc" % (var,var,ftime.year,ftime.month,ltime.year,ltime.month))[6]
+print 'level:',level,"shuffle:",shuffle
+print 'total cmor:',totcmor,mincmor,totcmor/ntimes,maxcmor,lcmor
+lcdms = os.stat("Test/crap.nc")[6]
+print 'total cdms:',totcdms,mincdms,totcdms/ntimes,maxcdms,lcdms
+print 'Size diff:',float(lcmor)/float(lcdms)
+print 'speed diff:', totcmor/totcdms
+
+if os.path.exists("summary.txt"):
+    f = open("summary.txt")
+    s=f.read()
+    f.close()
+    dic = eval(s)
+else:
+    dic = {}
+
+dic[(level,shuffle)]=(float(lcmor)/float(lcdms),totcmor/totcdms)
+
+for i in range(10):
+    a = dic.get((i,0),"N/A")
+    b = dic.get((i,1),"N/A")
+    print 'Level: ',i,"no suffle:",a,"shuffle",b
+f=open("summary.txt","w")
+f.write(repr(dic))
+f.close()
+
diff --git a/Test/in_files.py b/Test/in_files.py
new file mode 100644
index 0000000..c010f74
--- /dev/null
+++ b/Test/in_files.py
@@ -0,0 +1,31 @@
+input_tables = {
+    'climatology_test_code' : ['climatology_test_table_A'],
+    'test_any_from_asc' : ['CMOR_SAMPLE_TABLE'],
+    'test_any_from_asc_d' : ['CMOR_SAMPLE_TABLE'],
+    'test_any_from_asc_i' : ['CMOR_SAMPLE_TABLE'],
+    'karls_test' : ['IPCC_test_table_A'],
+    'test1' : ['CMOR_SAMPLE_TABLE'],
+    'test2' : ['CMOR_SAMPLE_TABLE'],
+    'test3' : ['CMOR_SAMPLE_TABLE'],
+    'test4' : ['CMOR_SAMPLE_TABLE'],
+    'main_prog' : ['CMOR_SAMPLE_TABLE'],
+    'test_any_from_asc_i' : ['CMOR_SAMPLE_TABLE',],
+    'mytest_4d_r' : ['CMOR_SAMPLE_TABLE'],
+    'rewrite_harvardf_data': ['Curts_table'],
+    'test_3h' : ['IPCC_table_A3'],
+    'test_dimensionless' : ['IPCC_table_A1'],
+    'test_fortran_example_00' : ['IPCC_test_table_A'],
+    'test_fortran_example_01' : ['IPCC_test_table_A','IPCC_test_table_Grids'],
+    'test_station_data' : ['IPCC_test_table_S'],
+    'test_region': ['IPCC_test_table_O'],
+    'test_sigma' : ['IPCC_table_A1'],
+    'test_singleton' : ['IPCC_test_table_A'],
+    'mytest_4d_r_big_array' : ['CMOR_SAMPLE_TABLE'],
+    'mytest_4d_d_big_array_2' : ['CMOR_SAMPLE_TABLE'],
+    'mytest_4d_d_big_array_3' : ['CMOR_SAMPLE_TABLE'],
+    'mytest_4d_d_big_array_4' : ['CMOR_SAMPLE_TABLE'],
+    'mytest_4d_d_big_array_5' : ['CMOR_SAMPLE_TABLE'],
+    'test_lots_of_variables' : ['IPCC_test_table_As'],
+    'test_shrt_exp_nm_set_att_initi' : ['IPCC_test_table_As'],
+    'test_sophie' : ['Sophie_Table'],
+    }
diff --git a/Test/ipcc_test_code.c b/Test/ipcc_test_code.c
new file mode 100644
index 0000000..df65c5b
--- /dev/null
+++ b/Test/ipcc_test_code.c
@@ -0,0 +1,446 @@
+#include <time.h>
+#include <stdio.h>
+#include<string.h>
+#include "cmor.h"
+#include <stdlib.h>
+
+void read_coords(alats, alons, plevs, bnds_lat, bnds_lon,lon,lat,lev)
+     double *alats,*alons;
+     int *plevs;
+     double *bnds_lat,*bnds_lon;
+     int lon,lat,lev;
+{
+  int i;
+    
+  for (i=0;i<lon;i++) {
+    alons[i] = i*360./lon;
+    bnds_lon[2*i] = (i - 0.5)*360./lon;
+    bnds_lon[2*i+1] = (i + 0.5)*360./lon;
+  };
+  
+
+  for (i=0;i<lat;i++) {
+    alats[i] = (lat-i)*10;
+    bnds_lat[2*i] = (lat-i)*10 + 5.;
+    bnds_lat[2*i+1] = (lat-i)*10 - 5.;
+  };
+  
+
+  plevs[0]=1000;
+  plevs[1]=925;
+  plevs[2]=850;
+  plevs[3]=700;
+  plevs[4]=600;
+  plevs[5]=500;
+  plevs[6]=400;
+  plevs[7]=300;
+  plevs[8]=250;
+  plevs[9]=200;
+  plevs[10]=150;
+  plevs[11]=100;
+  plevs[12]=70;
+  plevs[13]=50;
+  plevs[14]=30;
+  plevs[15]=20;
+  plevs[16]=10;
+}
+
+void read_time(it, time, time_bnds)
+     int it;
+     double time[];
+     double time_bnds[];
+{    
+  time[0] = (it-0.5)*30.;
+  time_bnds[0] = (it-1)*30.;
+  time_bnds[1] = it*30.;
+
+  time[0]=it;
+  time_bnds[0] = it;
+  time_bnds[1] = it+1;
+
+}
+  
+void read_3d_input_files(it, varname, field,n0,n1,n2)
+     int it,n0,n1,n2;
+     char *varname;
+     double field[];
+{
+  int i,j,k;
+  float factor,offset;
+    
+  if (strcmp(varname,"CLOUD")==0) {
+    factor = 0.1;
+    offset = -50.;
+  }
+  else if (strcmp(varname,"U")==0) {
+    factor = 1.;
+    offset = 100.;
+  }
+  else if (strcmp(varname,"T")==0) {
+    factor = 0.5;
+    offset = -150.;
+  }
+    
+  for (k=0;k<n2;k++) {
+    for (j=0;j<n1;j++) {
+      for (i=0;i<n0;i++) {
+        field[k*(n0*n1)+j*n0+i] = (k*64 + j*16 + i*4 + it)*factor - offset;
+      }
+    }
+  }
+}
+
+void read_2d_input_files(it, varname, field, n0, n1)
+  int it,n0,n1;
+  char *varname;
+  double field[];
+{    
+  int i, j,k;
+  double factor, offset;
+  double tmp;
+  
+  if (strcmp(varname,"LATENT")==0){
+    factor = 1.;
+    offset = 120.;
+  }
+  else if (strcmp(varname,"TSURF")==0){
+    factor = 2.0;
+    offset = -230.;
+  }
+  else if (strcmp(varname,"SOIL_WET")==0){
+    factor = 10.;
+    offset = 0.;
+  }
+  else if (strcmp(varname,"PSURF")==0){
+    factor = 1.;
+    offset = -9.7e2;
+  }
+
+  for (j=0;j<n0;j++){
+    for (i=0;i<n1;i++) {
+      tmp = ((double)j*16. + (double)(i)*4. + (double)it)*factor - offset;
+      k= (n0-1-j)*n1+i;
+      field[k] = tmp;
+    }
+  }
+}
+
+int main()
+     /*
+/*   Purpose:   To serve as a generic example of an application that */
+/*       uses the "Climate Model Output Rewriter" (CMOR) */
+
+/*    CMOR writes CF-compliant netCDF files. */
+/*    Its use is strongly encouraged by the IPCC and is intended for use  */
+/*       by those participating in many community-coordinated standard  */
+/*       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE, */
+/*       etc.) */
+
+/*   Background information for this sample code: */
+
+/*      Atmospheric standard output requested by IPCC are listed in  */
+/*   tables available on the web.  Monthly mean output is found in */
+/*   tables A1a and A1c.  This sample code processes only two 3-d  */
+/*   variables listed in table A1c ("monthly mean atmosphere 3-D data"  */
+/*   and only four 2-d variables listed in table A1a ("monthly mean  */
+/*   atmosphere + land surface 2-D (latitude, longitude) data").  The  */
+/*   extension to many more fields is trivial. */
+
+/*      For this example, the user must fill in the sections of code that  */
+/*   extract the 3-d and 2-d fields from his monthly mean "history"  */
+/*   files (which usually contain many variables but only a single time  */
+/*   slice).  The CMOR code will write each field in a separate file, but  */
+/*   many monthly mean time-samples will be stored together.  These  */
+/*   constraints partially determine the structure of the code. */
+
+
+/*   Record of revisions: */
+
+/*       Date        Programmer(s)           Description of change */
+/*       ====        ==========              ===================== */
+/*      10/22/03     Rusty Koder              Original code */
+/*       1/28/04     Les R. Koder             Revised to be consistent */
+/*                                            with evolving code design */
+{
+
+  /*   dimension parameters: */
+  /* --------------------------------- */
+#define   ntimes  2    /* number of time samples to process */
+#define   lon  4       /* number of longitude grid cells   */
+#define   lat  3       /* number of latitude grid cells */
+#define   lev  17       /* number of standard pressure levels */
+#define   n2d  4       /* number of IPCC Table A1a fields to be */                                      /*     output. */
+#define n3d 3       /* number of IPCC Table A1c fields to  */
+                     /*                                be output.   */
+
+  /*   Tables associating the user's variables with IPCC standard output  */
+  /*   variables.  The user may choose to make this association in a  */
+  /*   different way (e.g., by defining values of pointers that allow him  */
+  /*   to directly retrieve data from a data record containing many  */
+  /*   different variables), but in some way the user will need to map his  */
+  /*   model output onto the Tables specifying the MIP standard output. */
+
+  /* ---------------------------------- */
+
+  /* My variable names for IPCC Table A1c fields */
+  char varin3d[n3d][6]={"CLOUD", "U", "T" };
+  
+  /* Units appropriate to my data */
+  char units3d[n3d][6]={"%", "m s-1", "K"};
+  
+  /* Corresponding IPCC Table A1c entry (variable name)  */
+  char entry3d[n3d][3]={"cl","ua","ta"};
+
+  /* My variable names for IPCC Table A1a fields */
+  char varin2d[n2d][9]={ "LATENT","TSURF","SOIL_WET","PSURF" };
+  
+  /* Units appropriate to my data */
+  char units2d[n2d][7]={ "W m-2","K","kg m-2","Pa"};
+  
+  char positive2d[n2d][4]={"down"," ", " ", " "};
+  
+  /* Corresponding IPCC Table A1a entry (variable name)  */
+  char entry2d[n2d][6]={"hfls", "tas","mrsos","ps"};
+
+/*  uninitialized variables used in communicating with CMOR: */
+/*  --------------------------------------------------------- */
+
+  int error_flag;
+  int znondim_id, zfactor_id;
+  int var2d_ids[n2d];
+  int var3d_ids[n3d];
+  double data2d[lat*lon];
+  double data3d[lev*lat*lon];
+  double alats[lat];
+  double alons[lon];
+ int ilats[lat];
+  int ilons[lon];
+  double   plevs[lev];
+  int   iplevs[lev];
+  long   lplevs[lev];
+  float   fplevs[lev];
+  double Time[2];
+  double  bnds_time[4];
+  double bnds_lat[lat*2];
+  double bnds_lon[lon*2];
+  double zlevs[lev];
+  double zlev_bnds[lev+1];
+
+  double a_coeff[lev]={ 0.1, 0.2, 0.3, 0.22, 0.1 };
+  double b_coeff[lev]={ 0.0, 0.1, 0.2, 0.5, 0.8 };
+  float p0= 1.e5;
+  double a_coeff_bnds[lev+1]={0.,.15, .25, .25, .16, 0.};
+  double b_coeff_bnds[lev+1]={0.,.05, .15, .35, .65, 1.};
+  int ilon, ilat, ipres, ilev, itim;
+  double dtmp,dtmp2;
+
+  /*  Other variables: */
+  /*  --------------------- */
+  
+  int it, m, i,ierr , j;
+  int myaxes[10];
+  int myaxes2[10];
+  int myvars[10];
+  char id[CMOR_MAX_STRING];
+  char units[CMOR_MAX_STRING];
+  char interval[CMOR_MAX_STRING];
+  char anames[25][CMOR_MAX_STRING];
+  char type;
+  char regions[5][23] = { "atlantic_arctic_ocean", "indian_pacific_ocean", "pacific_ocean", "global_ocean", "sf_bay"};
+  double timestest[5];
+  /* Externals funcs */
+  int tables[5];
+  char msg[555];
+  double bt=0.;
+  /* ================================ */
+  /*  Execution begins here: */
+  /* ================================ */
+  
+  /* Read coordinate information from model into arrays that will be passed  */
+  /*   to CMOR. */
+  /* Read latitude, longitude, and pressure coordinate values into  */
+  /*   alats, alons, and plevs, respectively.  Also generate latitude and  */
+  /*   longitude bounds, and store in bnds_lat and bnds_lon, respectively. */
+  /*   Note that all variable names in this code can be freely chosen by */
+  /*   the user. */
+  
+  /*   The user must write the subroutine that fills the coordinate arrays  */
+  /*   and their bounds with actual data.  The following line is simply a */
+  /*   a place-holder for the user's code, which should replace it. */
+  
+  /*  *** possible user-written call *** */
+  
+
+  
+  m = CMOR_EXIT_ON_MAJOR;
+  j = CMOR_REPLACE;
+  i=1;
+  it=0;
+  printf("ok mode is:%i\n",m);
+  ierr = cmor_setup(NULL,&j,NULL,&m,NULL,&i);//,"  ipcc_test.LOG  ");
+
+  read_coords(&alats[0], &alons[0], &iplevs[0], &bnds_lat[0], &bnds_lon[0],lon,lat,lev);
+  int tmpmo[12];
+  printf("Test code: ok init cmor\n");
+  char c1[CMOR_MAX_STRING];
+  char c2[CMOR_MAX_STRING];
+  strcpy(c1,"GICCM1(2002)\0");
+  strcpy(c2,"Nat\0");
+
+
+  printf("yep: %s, %s\n",c1,c2);
+  ierr = cmor_dataset(
+       "Test",
+       "abrupt 4XCO2",
+       "GICC (Generic International Climate Center, Geneva, Switzerland)",
+       "GICCM1(2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+       "standard",
+       1,
+       "Rusty Koder (koder at middle_earth.net)",
+       "Output from archive/giccm_03_std_2xCO2_2256.",
+       "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",
+       "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",
+       0,
+       0,
+       &tmpmo[0],&c1[0],&c2[0],
+       0,
+       0,"GICC","N/A",&bt);
+
+  printf("Test code: ok load cmor table(s)\n");
+  ierr = cmor_load_table("Tables/CMIP5_Omon",&tables[0]);
+  ierr = cmor_load_table("Tables/CMIP5_Amon",&tables[1]);
+  strcpy(id,"time");
+  strcpy(units,"months since 1980");
+  strcpy(interval,"1 month");
+  read_time(0, &Time[0], &bnds_time[0]);
+  read_time(1, &Time[1], &bnds_time[2]);
+  ierr = cmor_axis(&myaxes[0],id,units,ntimes,&Time[0],'d',&bnds_time[0],2,interval);
+  
+  strcpy(id,"latitude");
+  strcpy(units,"degrees_north");
+  strcpy(interval,"");
+  ierr = cmor_axis(&myaxes[1],id,units,lat,&alats,'d',&bnds_lat,2,interval);
+  strcpy(id,"longitude");
+  strcpy(units,"degrees_east");
+  ierr = cmor_axis(&myaxes[2],id,units,lon,&alons,'d',&bnds_lon,2,interval);
+  strcpy(id,"plevs");
+  strcpy(units,"hPa");
+  ierr = cmor_axis(&myaxes[3],id,units,lev,&iplevs,'i',NULL,0,interval);
+
+  zlevs[0]=0.1;
+  zlevs[1]= 0.3;
+  zlevs[2]=0.5;
+  zlevs[3]= 0.72;
+  zlevs[4] =  0.9;
+
+  zlev_bnds[0]=0.;
+  zlev_bnds[1]=.2;
+  zlev_bnds[2]=.42;
+  zlev_bnds[3]=.62;
+  zlev_bnds[4]=.8;
+  zlev_bnds[5]=1.;
+/*   p0 = 1.e5; */
+/*   a_coeff = { 0.1, 0.2, 0.3, 0.22, 0.1 }; */
+/*   b_coeff = { 0.0, 0.1, 0.2, 0.5, 0.8 }; */
+
+/*   a_coeff_bnds={0.,.15, .25, .25, .16, 0.}; */
+/*   b_coeff_bnds={0.,.05, .15, .35, .65, 1.}; */
+
+  ierr = cmor_axis(  &myaxes[4],"standard_hybrid_sigma","1",5,&zlevs,'d',&zlev_bnds,1,interval);
+
+  cmor_set_table(tables[0]);
+  /* ok here we declare a "regions" axis */
+  printf("Test code: defining axis region \n");
+  ierr = cmor_axis(  &myaxes[5],"basin","",4,&regions[0],'c',NULL,23,interval);
+
+  printf("Test code: Redefining time/lat from O table\n");
+
+  strcpy(id,"time");
+  strcpy(units,"months since 1980");
+  strcpy(interval,"1 month");
+  read_time(0, &Time[0], &bnds_time[0]);
+  read_time(1, &Time[1], &bnds_time[2]);
+  ierr = cmor_axis(&myaxes[7],id,units,ntimes,&Time[0],'d',&bnds_time[0],2,interval);
+
+  strcpy(id,"latitude");
+  strcpy(units,"degrees_north");
+  strcpy(interval,"");
+  ierr = cmor_axis(&myaxes[8],id,units,lat,&alats,'d',&bnds_lat,2,interval);
+
+  cmor_set_table(tables[1]);
+
+  dtmp = -999;
+  dtmp2=1.e-4;
+  myaxes2[0] = myaxes[0];
+  myaxes2[1] = myaxes[3];
+  myaxes2[2] = myaxes[1];
+  myaxes2[3] = myaxes[2];
+
+  printf("Test code: defining variables from table 1, %s\n",positive2d[0]);
+  ierr = cmor_variable(&myvars[0],entry2d[0],units2d[0],3,myaxes,'d',NULL,&dtmp2,&positive2d[0][0],varin2d[0],"no history","no future");
+  ierr = cmor_variable(&myvars[1],entry3d[2],units3d[2],4,myaxes2,'d',NULL,&dtmp2,NULL,varin3d[2],"no history","no future");
+  printf("Test code: definig tas\n");
+  ierr = cmor_variable(&myvars[5],"tas","K",3,myaxes,'d',NULL,&dtmp2,NULL,"TS","no history","no future");
+
+  myaxes2[1] = myaxes[4];
+  ierr = cmor_variable(&myvars[2],entry3d[0],units3d[0],4,myaxes2,'d',NULL,&dtmp2,NULL,varin3d[0],"no history","no future");
+
+
+  
+  ierr = cmor_zfactor(&myvars[3],myaxes2[1],"p0","Pa",0,NULL,'f',&p0,NULL);
+  ierr = cmor_zfactor(&myvars[3],myaxes2[1],"b","",1,&myaxes2[1],'d',&b_coeff,&b_coeff_bnds);
+  ierr = cmor_zfactor(&myvars[3],myaxes2[1],"a","",1,&myaxes2[1],'d',&a_coeff,&a_coeff_bnds);
+/*   printf("defining ap\n"); */
+/*   for(i=0;i<5;i++) {a_coeff[i]*=1.e3;printf("sending acoef: %i, %lf\n",i,a_coeff[i]);} */
+/*   for(i=0;i<6;i++) {a_coeff_bnds[i]*=1.e5;printf("sending acoef: %i, %lf\n",i,a_coeff_bnds[i]);} */
+/*   ierr = cmor_zfactor(&myvars[3],myaxes2[1],"ap","hPa",1,&myaxes2[1],'d',&a_coeff,&a_coeff_bnds); */
+  ierr = cmor_zfactor(&myvars[3],myaxes2[1],"ps","hPa",3,&myaxes[0],'d',NULL,NULL);
+
+  /* ok here we decalre a variable for region axis testing */
+  cmor_set_table(tables[0]);
+  myaxes2[0] = myaxes[7]; /* time */
+  myaxes2[1] = myaxes[5]; /* region */
+  myaxes2[2] = myaxes[8]; /* latitudes */
+  printf("Test code: ok we define hfogo positive: %s\n",positive2d[0]);
+  ierr = cmor_variable(&myvars[4],"htovgyre","W",3,myaxes2,'d',NULL,&dtmp2,&positive2d[0][0],varin2d[0],"no history","no future");
+
+  cmor_set_table(tables[1]);
+
+  for (i=0;i<ntimes;i++) {
+    printf("Test code: writing time: %i of %i\n",i+1,ntimes);
+    
+    printf("2d\n");
+    read_2d_input_files(i, varin2d[0], &data2d,lat,lon);
+    sprintf(id,"%i",i);
+/*     ierr = cmor_write(myvars[0],&data2d,'d',id,1,&time,&bnds_time,NULL); */
+/*     read_3d_input_files(i, varin3d[2], &data3d,lev,lat,lon); */
+/*     ierr = cmor_write(myvars[1],&data3d,'d',id,1,&time,&bnds_time,NULL); */
+/*     read_3d_input_files(i, varin3d[0], &data3d,5,lat,lon); */
+/*     ierr = cmor_write(myvars[2],&data3d,'d',id,1,&time,&bnds_time,NULL); */
+/*     read_2d_input_files(i, varin2d[3], &data2d,lat,lon); */
+/*     ierr = cmor_write(myvars[3],&data2d,'d',id,1,&time,&bnds_time,&myvars[2]); */
+    ierr = cmor_write(myvars[0],&data2d,'d',NULL,1,NULL,NULL,NULL);
+
+    printf("3d\n");
+    read_3d_input_files(i, varin3d[2], &data3d,lev,lat,lon);
+    ierr = cmor_write(myvars[1],&data3d,'d',NULL,1,NULL,NULL,NULL);
+    printf("writing tas\n");
+    read_2d_input_files(i, varin2d[1], &data2d,lat,lon);
+    ierr = cmor_write(myvars[5],&data2d,'d',NULL,1,NULL,NULL,NULL);
+
+    printf("3d zfactor\n");
+    read_3d_input_files(i, varin3d[0], &data3d,5,lat,lon);
+    ierr = cmor_write(myvars[2],&data3d,'d',NULL,1,NULL,NULL,NULL);
+    printf("writing ps\n");
+    read_2d_input_files(i, varin2d[3], &data2d,lat,lon);
+    ierr = cmor_write(myvars[3],&data2d,'d',NULL,1,NULL,NULL,&myvars[2]);
+
+    /* rereading hfls to fake hfogo */
+    printf("2d region\n");
+    read_2d_input_files(i, varin2d[0], &data2d,lat,lon);
+    ierr = cmor_write(myvars[4],&data2d,'d',NULL,1,NULL,NULL,NULL);
+  }
+  ierr = cmor_close_variable(myvars[0],NULL,NULL);
+  ierr = cmor_close();
+  return 0;
+}
diff --git a/Test/ipcc_test_code.f90 b/Test/ipcc_test_code.f90
new file mode 100644
index 0000000..1a6e19f
--- /dev/null
+++ b/Test/ipcc_test_code.f90
@@ -0,0 +1,591 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+      plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev2) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, itim2, ilon2,ilat2
+  DOUBLE PRECISION bt
+
+  character(256)::  outpath
+  
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       institute_id = 'PCMDI', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',&
+       model_id='GICCM1',forcing='TO',contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ilat2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev2,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='20 minutes')
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='20 minutes')
+  
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='standard_hybrid_sigma',       &
+       units='1', &
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='Tables/CMIP5_Amon',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.ne.3) then
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  else
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Lmon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon2, ilat2, itim2 /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m)) 
+  endif
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        call cmor_create_output_path(var3d_ids(m),outpath)
+        print*, 'Ok we will dump that at: ',outpath
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/karls_test.f90 b/Test/karls_test.f90
new file mode 100644
index 0000000..7b3748c
--- /dev/null
+++ b/Test/karls_test.f90
@@ -0,0 +1,639 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i, ii
+    
+    ii = 0
+    DO i = 1, SIZE(alons)
+       ii = ii+1
+       alons(i) = (ii-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (ii - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (ii - 0.5)*360./SIZE(alons)
+!!$       alons(size(alons)+1-i) = (ii-1)*360./SIZE(alons)
+!!$       bnds_lon(1,size(alons)+1-i) = (ii - 1.5)*360./SIZE(alons)
+!!$       bnds_lon(2,size(alons)+1-i) = (ii - 0.5)*360./SIZE(alons)
+!!$       alons(i) = (i-1)*360./SIZE(alons)
+!!$       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+!!$        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+!!$       alats(i) = i*10
+!!$       bnds_lat(1,i) = i*10. - 5.
+!!$       bnds_lat(2,i) = i*10. + 5.
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field) 
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j, ii
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       ii = 0
+       DO i=1,SIZE(field, 1)
+          ii = ii + 1
+          if (ii>size(field,1)) ii = 1
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (ii-1)*4 + it)*factor - offset
+!!$          field(size(field,1)+1-i,size(field,2)+1-j) = ((j-1)*16 + (ii-1)*4 + it)*factor - offset
+!          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+!          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM karls_test
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev2) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim,ilon2,ilat2,itim2
+
+  REAL, DIMENSION(lon,1,lat) :: dum3d
+  INTEGER :: iz
+
+  double precision ::  bt
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  bt=0.
+
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')!,logfile='karls_test.LOG')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',&
+       model_id='GICCM1',forcing='TO',contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt,institute_id="PCMDI")
+  
+  !  Define all axes that will be needed
+
+  iz =  cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='height2m',       &
+       units='m',                    &  
+       length=1,                     &
+       coord_vals=(/ 1.5 /) )        
+print*, 'iz = ', iz
+  
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+  ilat2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  print*, 'plevs:',plevs
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev2,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='standard_hybrid_sigma',       &
+       length=lev,                   &
+       units = '1', &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='Tables/CMIP5_Amon',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+     print*, 'got var3did:',var3d_ids(m),entry3d(m)
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     print*, 'Defining:',m,entry2d(m)
+     IF (m.eq.2) then
+!!$
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, iz, ilat, itim  /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+
+  else if (m.eq.3) then
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Lmon',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon2, ilat2, itim2 /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  else
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    print*, 'yep ',entry3d(1),shape(data3d)
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+    print*, 'passed'
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        print*, 'm,dsh:',m,shape(data3d),entry3d(m),' ',varin3d(m),var3d_ids(m)
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        print*, 'Done------------------------------------------------------------------'
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        IF (m == 2) then
+           dum3d(:,1,:) = data2d
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = dum3d(:,1,:),                               &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+
+        ELSE
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+       ENDIF
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM karls_test
+
diff --git a/Test/main_prog.f90 b/Test/main_prog.f90
new file mode 100644
index 0000000..21f491e
--- /dev/null
+++ b/Test/main_prog.f90
@@ -0,0 +1,511 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/main_prog.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/main_prog.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+          plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '',       '' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(3) :: axis2d_ids2
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  bt=0.
+
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+   axis2d_ids2(1) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids2(2) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis2d_ids2(3) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+ 
+  axis3d_ids(2) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(3) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(1)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.eq.3) then
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Lmon',  & 
+             table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids2,       &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+     else 
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = RESHAPE(data3d, (/ lat*lon*lev /)),  &
+             ntimes_passed = 1,                                   &
+             time_vals     = (/ time /),                          &
+             time_bnds     = RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = RESHAPE(data2d, (/ lat*lon /)),      &
+             ntimes_passed = 1,                                   &
+             time_vals     = (/ time /),                          &
+             time_bnds     = RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/mytest.f90 b/Test/mytest.f90
new file mode 100644
index 0000000..b84ed26
--- /dev/null
+++ b/Test/mytest.f90
@@ -0,0 +1,182 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot
+!  integer, allocatable, dimension(:):: arrayin
+  double precision, allocatable, dimension(:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+
+  print*, 'hi enter test file case'
+  filein='Test/tas.asc'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA**************************'
+     print*, 'Name:',trim(adjustl(current%name)),'--',trim(adjustl(mydims%name))
+     print*, current%units
+     print*, current%n,size(current%values)
+     print*, current%values(1:min(4,size(current%values)))
+     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (i==0) then
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n)
+     else
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VAR'
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'tas',&
+       'K',&
+       myaxis,&
+       missing_value=1.e20)
+
+!! figures out length of dimension other than time
+
+
+
+  j=ntot/mydims%n
+  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+  do i=1,mydims%n !! write times one at a time
+!!$     print*,'before:', arrayin(j*(i-1)+1),j*(i-1)+1,j,i,ntot
+     print*, 'size of arrayin',size(arrayin(j*(i-1)+1:j*i))
+     ierr = cmor_write( &
+          var_id        = myvar,                        &
+          data          = arrayin(j*(i-1)+1:j*i), &
+          ntimes_passed = 1,                              &
+          time_vals     = mydims%values(i:i),                         &
+          time_bnds     = mydims%bounds(1:2,i:i) &
+          )
+  enddo
+
+  ierr = cmor_close()  
+
+ 
+contains
+  subroutine allocate_dims(file_id,mydims,ndim)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(I4)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(8-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+    allocate(arrayin(n))
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    integer, dimension(ntot),intent(inout) :: arrayin
+    double precision, dimension(ntot),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,*) current%name
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name)),n,ntot
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%values(1),current%values(n)
+       print*, current%bounds(1,1),current%bounds(2,1)
+       print*, current%bounds(1,n),current%bounds(2,n)
+       current=>current%next
+    enddo
+    print *, 'ntot:',ntot
+       read(file_unit,*) (arrayin(i),i=1,ntot)
+
+print* ,trim(adjustl(mydims%name))
+print*,'done reading'
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_3d_i_2.f90 b/Test/mytest_3d_i_2.f90
new file mode 100644
index 0000000..55a7c96
--- /dev/null
+++ b/Test/mytest_3d_i_2.f90
@@ -0,0 +1,194 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+!  double precision, allocatable, dimension(:,:,:,:):: arrayin
+  integer, allocatable, dimension(:,:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax
+
+  print*, 'hi'
+  filein='Test/ta.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='20 minutes')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VAR'
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=120)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+  print*,'before:', shape(arrayin),mydims%n
+  print*,'before:', shape(arrayin(:,i,:))
+  print*, 'time before:',mydims%next%values(i:i)
+  do i = 1, mydims%n
+
+     amin=1.e20
+     amax=-1.e20
+     do j=1, size(arrayin,2)
+        do k= 1, size(arrayin,3)
+           do l = 1, size(arrayin,4)
+              if (arrayin(i,j,k,l).lt.amin) amin=arrayin(i,j,k,l)
+              if (arrayin(i,j,k,l).gt.amax) amax=arrayin(i,j,k,l)
+           end do
+        enddo
+     enddo
+
+     print*, 'Array for',i,' min,max :',amin,amax
+     ierr = cmor_write( &
+          var_id        = myvar, &
+          data          = arrayin(i,:,:,:), &
+          ntimes_passed = 1,   &
+          time_vals     = mydims%values(i:i),  &
+          time_bnds     = mydims%bounds(:,i:i) &
+          )
+  enddo
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'I') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'I') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    integer, dimension(:,:,:,:),intent(inout) :: arrayin
+    integer, dimension(ndim)
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(23,*) (current%name)
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(23,*) (current%units)
+       read(23,*) (current%values(j),j=1,n)
+       read(23,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_3d_r.f90 b/Test/mytest_3d_r.f90
new file mode 100644
index 0000000..c611f04
--- /dev/null
+++ b/Test/mytest_3d_r.f90
@@ -0,0 +1,182 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot
+!  double precision, allocatable, dimension(:,:,:):: arrayin
+  real, allocatable, dimension(:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real mymiss
+
+  print*, 'hi'
+  filein='Test/tas_3d_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='20 minutes')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  mymiss=1.e20
+  print*,'CMOR VARCMOR VARCMOR VARCMOR',mymiss
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'tas',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+  print*,'before:', shape(arrayin),mydims%n
+  print*,'before:', shape(arrayin(:,:,i))
+  print*, 'time before:',mydims%values(i:i)
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = arrayin, &
+       ntimes_passed = mydims%next%n,   &
+       time_vals     = mydims%next%values,  &
+       time_bnds     = mydims%next%bounds &
+       )
+
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(I8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    real, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(23,*) (current%name)
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(23,*) (current%units)
+       read(23,*) (current%values(j),j=1,n)
+       read(23,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_3d_r_2.f90 b/Test/mytest_3d_r_2.f90
new file mode 100644
index 0000000..b0b0390
--- /dev/null
+++ b/Test/mytest_3d_r_2.f90
@@ -0,0 +1,196 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+!  double precision, allocatable, dimension(:,:,:,:):: arrayin
+  real, allocatable, dimension(:,:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'hi'
+  filein='Test/ta_3D_r_2.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='20 minutes')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'before:', shape(arrayin),mydims%n
+!!$  print*,'before:', shape(arrayin(:,i,:))
+!!$  print*, 'time before:',mydims%next%values(i:i)
+  do i = 1, mydims%n
+
+     amin=1.e20
+     amax=-1.e20
+     do j=1, size(arrayin,2)
+        do k= 1, size(arrayin,3)
+           do l = 1, size(arrayin,4)
+              if (arrayin(j,k,l,i).lt.amin) amin=arrayin(i,j,k,l)
+              if (arrayin(j,k,l,i).gt.amax) amax=arrayin(i,j,k,l)
+           end do
+        enddo
+     enddo
+
+     print*, 'Array for',i,' min,max :',amin,amax,'Ssub',shape(arrayin(:,:,:,i)),'S',shape(arrayin)
+     ierr = cmor_write( &
+          var_id        = myvar, &
+          data          = arrayin(:,:,:,i), &
+          ntimes_passed = 1,   &
+          time_vals     = mydims%values(i:i),  &
+          time_bnds     = mydims%bounds(:,i:i) &
+          )
+  enddo
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    real, dimension(:,:,:,:),intent(inout) :: arrayin
+!    integer, dimension(ndim)
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(23,*) (current%name)
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(23,*) (current%units)
+       read(23,*) (current%values(j),j=1,n)
+       read(23,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_4d_d_big_array_2.f90 b/Test/mytest_4d_d_big_array_2.f90
new file mode 100644
index 0000000..8b5e2bd
--- /dev/null
+++ b/Test/mytest_4d_d_big_array_2.f90
@@ -0,0 +1,207 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+  double precision bt
+  bt=0.
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1)*dimlength(2)*5*dimlength(3)*dimlength(4)))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+  bigarray=666. ! initialize bigarray at some bad value
+  ierr=1
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(2)
+           do i = 1, dimlength(1)
+              bigarray(ierr)=arrayin(i,j,k,l)
+              ierr=ierr+1
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='30 days')
+     else
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray, &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       if (current%name.eq."pressure") current%name="plevs"
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_4d_d_big_array_3.f90 b/Test/mytest_4d_d_big_array_3.f90
new file mode 100644
index 0000000..460bce3
--- /dev/null
+++ b/Test/mytest_4d_d_big_array_3.f90
@@ -0,0 +1,207 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:,:,:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+  double precision bt
+  bt=0.
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1),dimlength(2),dimlength(3),dimlength(4),5))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+  bigarray=666. ! initialize bigarray at some bad value
+  ierr=1
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(2)
+           do i = 1, dimlength(1)
+              bigarray(i,j,k,l,1)=arrayin(i,j,k,l)
+              ierr=ierr+1
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICCM1 (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='30 days')
+     else
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray(:,:,:,:,1), &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       if (current%name.eq."pressure") current%name="plevs"
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_4d_d_big_array_4.f90 b/Test/mytest_4d_d_big_array_4.f90
new file mode 100644
index 0000000..cf6d4a0
--- /dev/null
+++ b/Test/mytest_4d_d_big_array_4.f90
@@ -0,0 +1,206 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: smallarray(:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+  double precision bt
+  bt=0.
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(smallarray(dimlength(1)+5,dimlength(3)+6,dimlength(4)+7))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(smallarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+  print*, 'Test Code: bounds:',current%bounds,current%units
+      myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds, &
+          interval='1 month')
+     else
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+do i=1,current%n
+  smallarray=666. ! initialize smallarray at some bad value
+  ierr=1
+  !put time i into it
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(1)
+           smallarray(j,k,l)=arrayin(j,i,k,l)
+        enddo
+     enddo
+  enddo
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = smallarray, &
+       ntimes_passed = 1 &
+       )
+enddo
+ierr = cmor_close(myvar)
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       if (current%name.eq."pressure") current%name="plevs"
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_4d_d_big_array_5.f90 b/Test/mytest_4d_d_big_array_5.f90
new file mode 100644
index 0000000..26bff82
--- /dev/null
+++ b/Test/mytest_4d_d_big_array_5.f90
@@ -0,0 +1,204 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:,:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+  double precision bt
+  bt=0.
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1)+10,dimlength(2)+10,dimlength(3)+10,dimlength(4)+10))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+  bigarray=666. ! initialize bigarray at some bad value
+  ierr=1
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(2)
+           do i = 1, dimlength(1)
+              bigarray(i,j,k,l)=arrayin(i,j,k,l)
+              ierr=ierr+1
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id='GICCM1', &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found','with ',current%n,'times'
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds, &
+          interval='31 days')
+     else
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       if (current%name.eq."pressure") current%name="plevs"
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_4d_r.f90 b/Test/mytest_4d_r.f90
new file mode 100644
index 0000000..89ae6d2
--- /dev/null
+++ b/Test/mytest_4d_r.f90
@@ -0,0 +1,189 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+!  double precision, allocatable, dimension(:,:,:,:):: arrayin
+  real, allocatable, dimension(:,:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+  double precision bt
+  bt=0.
+  print*, 'hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id="GICCM1",&
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='1 month')
+     else
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'before:', shape(arrayin),mydims%n
+!!$  print*,'before:', shape(arrayin(:,i,:))
+!!$  print*, 'time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'values:',current%values
+print*, 'bounds:',current%bounds
+print*, 'N:',current%n
+  ierr =  cmor_write( &
+       myvar, &
+       arrayin, &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    real, dimension(:,:,:,:),intent(inout) :: arrayin
+!    integer, dimension(ndim)
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       if (current%name.eq."pressure") current%name="plevs"
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/mytest_4d_r_big_array.f90 b/Test/mytest_4d_r_big_array.f90
new file mode 100644
index 0000000..d08d690
--- /dev/null
+++ b/Test/mytest_4d_r_big_array.f90
@@ -0,0 +1,204 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:,:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+  double precision bt
+  bt=0.
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1)+10,dimlength(2)+10,dimlength(3)+10,dimlength(4)+10))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array'
+  bigarray=666. ! initialize bigarray at some bad value
+  do i = 1, dimlength(1)
+     do j = 1, dimlength(2)
+        do k = 1, dimlength(3)
+           do l = 1, dimlength(4)
+              bigarray(i,j,k,l)=arrayin(i,j,k,l)
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='1 month')
+     else
+     myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray, &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       if (current%name.eq."pressure") current%name="plevs"
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/nc2asc.py b/Test/nc2asc.py
new file mode 100755
index 0000000..88f2600
--- /dev/null
+++ b/Test/nc2asc.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+
+import cdms2,sys, genutil
+cdms2.setAutoBounds('on')
+
+type = 'd'
+
+order='zxty'
+#order='xty'
+#order = None
+#order= 'txy'
+var ='ta'
+if len(sys.argv)>2:
+	fnm=sys.argv[1]
+	fout=sys.argv[2]
+else:
+	fnm='/ipcc/20c3m/atm/mo/%s/ncar_ccsm3_0/run1/%s_A1.20C3M_1.CCSM.atmm.1870-01_cat_1879-12.nc' % (var,var)
+	fout='Test/%s.asc' % (var)
+
+f=cdms2.open(fnm)
+
+ntimes= 3
+print 'var:',var
+#s=f(var,time=slice(0,3),latitude=(-20,20),order=order,squeeze=1)
+if order is not None:
+	if order.find('z')>-1:
+		s=f(var,time=slice(0,ntimes),order=order,squeeze=1,longitude=(-180,180,'con'),level=slice(5,12))
+		print s.getLevel()[:]
+	else:
+		s=f(var,time=slice(0,ntimes),order=order,squeeze=1,longitude=(-180,180,'con'))
+else:
+	s=f(var,time=slice(0,ntimes),squeeze=1)
+#s=s[:,::4,::4]
+print 'Read in',s.shape
+try:
+	p=s.getLevel()
+	p.id='pressure'
+	p.units='Pa'
+except:
+	pass
+#print genutil.minmax(s)
+f.close()
+
+f=open(fout,'w')
+
+ndim=s.rank()
+print 'Dumping'
+print >>f, s.id
+print >>f, s.units
+print >>f, ndim
+
+for i in range(ndim):
+    ax=s.getAxis(i)
+    print >>f, len(ax)
+	
+for i in range(ndim):
+    ax=s.getAxis(i)
+    if ax.isLatitude():
+	    print >>f, 'latitude'
+    elif ax.isLongitude():
+	    print >>f,'longitude'
+    else:
+	    print >>f, ax.id
+    print >>f, ax.units
+    print  ax.id
+    print  ax.units
+    for j in ax[:]:
+        print >>f, j,
+    print >>f
+    for j in ax.getBounds().flat[:]:
+        print >>f, j,
+    print >>f
+f.flush()
+
+s=s.filled(120).astype(type)
+s=s.flat
+j=0
+for i in s[:]:
+    print >>f, i,
+    j+=1
+print >>f
+print j,s[-1]
+
+f.close()
diff --git a/Test/noinput b/Test/noinput
new file mode 100644
index 0000000..afcf4f8
--- /dev/null
+++ b/Test/noinput
@@ -0,0 +1,2 @@
+Test/tas.asc
+
diff --git a/Test/old_cmor_tables/climatology_test_code.f90 b/Test/old_cmor_tables/climatology_test_code.f90
new file mode 100644
index 0000000..a274be6
--- /dev/null
+++ b/Test/old_cmor_tables/climatology_test_code.f90
@@ -0,0 +1,355 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+      
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: time_bnds
+
+    INTEGER :: i
+    
+    DO i=1,SIZE(time)
+       time(i) = (it-1)*30.+ (i-.5)/SIZE(time)
+       time_bnds(1,i) = (it-1)*30.+ (i-1)*1.0/SIZE(time)
+       time_bnds(2,i) = (it-1)*30.+ i*1.0/SIZE(time) + 29.
+       print*, i,time_bnds(1,i),time(i),time_bnds(2,i)
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+
+    factor = 2.2
+    offset = -220.
+    
+    DO k=1,SIZE(field,3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,size(field,2)+1-j,k) = ((k-1)*0.005 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n2d = 1       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                  varin2d=(/  'TSURF' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=1), DIMENSION(n2d) :: &
+                          units2d=(/ 'K'/)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  '    ' /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=10), DIMENSION(n2d) :: &
+                        entry2d = (/ 'tasDiurnal' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  REAL, DIMENSION(lon,lat,24) :: data2d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(24) :: time
+  DOUBLE PRECISION, DIMENSION(2,24):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  INTEGER :: ilon, ilat, ipres, itim
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace',logfile="climatology_test_code.LOG")
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id = 'pcmdi-01', &
+       forcing = 'atm')
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='climatology_test_table_A',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='climatology_test_table_A',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='climatology_test_table_A',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes*24                &
+       )
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='climatology_test_table_A',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+     call read_time(it, time, bnds_time)
+
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        print*, 'CALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL'
+        print*, 'times:',time(1),time(2)
+        print*, 'btimes:',bnds_time(1,1),bnds_time(2,1),bnds_time(1,2),bnds_time(2,2)
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 24,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing climatology test Table A ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/old_cmor_tables/ipcc_test_code.f90 b/Test/old_cmor_tables/ipcc_test_code.f90
new file mode 100644
index 0000000..b57f7b2
--- /dev/null
+++ b/Test/old_cmor_tables/ipcc_test_code.f90
@@ -0,0 +1,550 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim
+
+  character(256)::  outpath
+  
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='20 minutes')
+  
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='standard_hybrid_sigma',       &
+       units='1', &
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='IPCC_test_table_A',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        call cmor_create_output_path(var3d_ids(m),outpath)
+        print*, 'Ok we will dump that at: ',outpath
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/old_cmor_tables/karls_test.f90 b/Test/old_cmor_tables/karls_test.f90
new file mode 100644
index 0000000..dcd6a65
--- /dev/null
+++ b/Test/old_cmor_tables/karls_test.f90
@@ -0,0 +1,604 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i, ii
+    
+    ii = 0
+    DO i = 1, SIZE(alons)
+       ii = ii+1
+       alons(i) = (ii-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (ii - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (ii - 0.5)*360./SIZE(alons)
+!!$       alons(size(alons)+1-i) = (ii-1)*360./SIZE(alons)
+!!$       bnds_lon(1,size(alons)+1-i) = (ii - 1.5)*360./SIZE(alons)
+!!$       bnds_lon(2,size(alons)+1-i) = (ii - 0.5)*360./SIZE(alons)
+!!$       alons(i) = (i-1)*360./SIZE(alons)
+!!$       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+!!$        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+!!$       alats(i) = i*10
+!!$       bnds_lat(1,i) = i*10. - 5.
+!!$       bnds_lat(2,i) = i*10. + 5.
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field) 
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j, ii
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       ii = 0
+       DO i=1,SIZE(field, 1)
+          ii = ii + 1
+          if (ii>size(field,1)) ii = 1
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (ii-1)*4 + it)*factor - offset
+!!$          field(size(field,1)+1-i,size(field,2)+1-j) = ((j-1)*16 + (ii-1)*4 + it)*factor - offset
+!          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+!          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM karls_test
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim
+
+  REAL, DIMENSION(lon,1,lat) :: dum3d
+  INTEGER :: iz
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace',logfile='karls_test.LOG')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',&
+       model_id='pcmdi-a01',forcing='atm')
+  
+  !  Define all axes that will be needed
+
+  iz =  cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='height1',       &
+       units='m',                    &  
+       length=1,                     &
+       coord_vals=(/ 1.5 /) )        
+print*, 'iz = ', iz
+  
+  ilat = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='standard_hybrid_sigma',       &
+       length=lev,                   &
+       units = '1', &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='IPCC_test_table_A',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+     print*, 'got var3did:',var3d_ids(m),entry3d(m)
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     IF (m==2) then
+!!$
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, iz, ilat, itim  /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+
+  else
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    print*, 'yep ',entry3d(1),shape(data3d)
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+    print*, 'passed'
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        print*, 'm,dsh:',m,shape(data3d),entry3d(m),' ',varin3d(m),var3d_ids(m)
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        print*, 'Done------------------------------------------------------------------'
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        IF (m == 2) then
+           dum3d(:,1,:) = data2d
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = dum3d(:,1,:),                               &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+
+        ELSE
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+       ENDIF
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM karls_test
+
diff --git a/Test/old_cmor_tables/main_prog.f90 b/Test/old_cmor_tables/main_prog.f90
new file mode 100644
index 0000000..44ce0ce
--- /dev/null
+++ b/Test/old_cmor_tables/main_prog.f90
@@ -0,0 +1,472 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/main_prog.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/main_prog.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '',       '' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="co2")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis3d_ids(2) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(3) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(1)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='CMOR_SAMPLE_TABLE',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='CMOR_SAMPLE_TABLE',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = RESHAPE(data3d, (/ lat*lon*lev /)),  &
+             ntimes_passed = 1,                                   &
+             time_vals     = (/ time /),                          &
+             time_bnds     = RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = RESHAPE(data2d, (/ lat*lon /)),      &
+             ntimes_passed = 1,                                   &
+             time_vals     = (/ time /),                          &
+             time_bnds     = RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/mytest.f90 b/Test/old_cmor_tables/mytest.f90
new file mode 100644
index 0000000..b94cced
--- /dev/null
+++ b/Test/old_cmor_tables/mytest.f90
@@ -0,0 +1,182 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot
+!  integer, allocatable, dimension(:):: arrayin
+  double precision, allocatable, dimension(:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+
+  print*, 'hi enter test file case'
+  filein='Test/tas.asc'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA**************************'
+     print*, 'Name:',trim(adjustl(current%name)),'--',trim(adjustl(mydims%name))
+     print*, current%units
+     print*, current%n,size(current%values)
+     print*, current%values(1:min(4,size(current%values)))
+     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (i==0) then
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n)
+     else
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VAR'
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'tas',&
+       'K',&
+       myaxis,&
+       missing_value=1.e20)
+
+!! figures out length of dimension other than time
+
+
+
+  j=ntot/mydims%n
+  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+  do i=1,mydims%n !! write times one at a time
+!!$     print*,'before:', arrayin(j*(i-1)+1),j*(i-1)+1,j,i,ntot
+     print*, 'size of arrayin',size(arrayin(j*(i-1)+1:j*i))
+     ierr = cmor_write( &
+          var_id        = myvar,                        &
+          data          = arrayin(j*(i-1)+1:j*i), &
+          ntimes_passed = 1,                              &
+          time_vals     = mydims%values(i:i),                         &
+          time_bnds     = mydims%bounds(1:2,i:i) &
+          )
+  enddo
+
+  ierr = cmor_close()  
+
+ 
+contains
+  subroutine allocate_dims(file_id,mydims,ndim)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(I4)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(8-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+    allocate(arrayin(n))
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    integer, dimension(ntot),intent(inout) :: arrayin
+    double precision, dimension(ntot),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,*) current%name
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name)),n,ntot
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%values(1),current%values(n)
+       print*, current%bounds(1,1),current%bounds(2,1)
+       print*, current%bounds(1,n),current%bounds(2,n)
+       current=>current%next
+    enddo
+    print *, 'ntot:',ntot
+       read(file_unit,*) (arrayin(i),i=1,ntot)
+
+print* ,trim(adjustl(mydims%name))
+print*,'done reading'
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_3d_i_2.f90 b/Test/old_cmor_tables/mytest_3d_i_2.f90
new file mode 100644
index 0000000..55a7c96
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_3d_i_2.f90
@@ -0,0 +1,194 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+!  double precision, allocatable, dimension(:,:,:,:):: arrayin
+  integer, allocatable, dimension(:,:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax
+
+  print*, 'hi'
+  filein='Test/ta.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='20 minutes')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VARCMOR VAR'
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=120)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+  print*,'before:', shape(arrayin),mydims%n
+  print*,'before:', shape(arrayin(:,i,:))
+  print*, 'time before:',mydims%next%values(i:i)
+  do i = 1, mydims%n
+
+     amin=1.e20
+     amax=-1.e20
+     do j=1, size(arrayin,2)
+        do k= 1, size(arrayin,3)
+           do l = 1, size(arrayin,4)
+              if (arrayin(i,j,k,l).lt.amin) amin=arrayin(i,j,k,l)
+              if (arrayin(i,j,k,l).gt.amax) amax=arrayin(i,j,k,l)
+           end do
+        enddo
+     enddo
+
+     print*, 'Array for',i,' min,max :',amin,amax
+     ierr = cmor_write( &
+          var_id        = myvar, &
+          data          = arrayin(i,:,:,:), &
+          ntimes_passed = 1,   &
+          time_vals     = mydims%values(i:i),  &
+          time_bnds     = mydims%bounds(:,i:i) &
+          )
+  enddo
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'I') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'I') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    integer, dimension(:,:,:,:),intent(inout) :: arrayin
+    integer, dimension(ndim)
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(23,*) (current%name)
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(23,*) (current%units)
+       read(23,*) (current%values(j),j=1,n)
+       read(23,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_3d_r.f90 b/Test/old_cmor_tables/mytest_3d_r.f90
new file mode 100644
index 0000000..c611f04
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_3d_r.f90
@@ -0,0 +1,182 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot
+!  double precision, allocatable, dimension(:,:,:):: arrayin
+  real, allocatable, dimension(:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real mymiss
+
+  print*, 'hi'
+  filein='Test/tas_3d_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='20 minutes')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  mymiss=1.e20
+  print*,'CMOR VARCMOR VARCMOR VARCMOR',mymiss
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'tas',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+  print*,'before:', shape(arrayin),mydims%n
+  print*,'before:', shape(arrayin(:,:,i))
+  print*, 'time before:',mydims%values(i:i)
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = arrayin, &
+       ntimes_passed = mydims%next%n,   &
+       time_vals     = mydims%next%values,  &
+       time_bnds     = mydims%next%bounds &
+       )
+
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(I8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    real, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(23,*) (current%name)
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(23,*) (current%units)
+       read(23,*) (current%values(j),j=1,n)
+       read(23,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_3d_r_2.f90 b/Test/old_cmor_tables/mytest_3d_r_2.f90
new file mode 100644
index 0000000..b0b0390
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_3d_r_2.f90
@@ -0,0 +1,196 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+!  double precision, allocatable, dimension(:,:,:,:):: arrayin
+  real, allocatable, dimension(:,:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'hi'
+  filein='Test/ta_3D_r_2.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='20 minutes')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'before:', shape(arrayin),mydims%n
+!!$  print*,'before:', shape(arrayin(:,i,:))
+!!$  print*, 'time before:',mydims%next%values(i:i)
+  do i = 1, mydims%n
+
+     amin=1.e20
+     amax=-1.e20
+     do j=1, size(arrayin,2)
+        do k= 1, size(arrayin,3)
+           do l = 1, size(arrayin,4)
+              if (arrayin(j,k,l,i).lt.amin) amin=arrayin(i,j,k,l)
+              if (arrayin(j,k,l,i).gt.amax) amax=arrayin(i,j,k,l)
+           end do
+        enddo
+     enddo
+
+     print*, 'Array for',i,' min,max :',amin,amax,'Ssub',shape(arrayin(:,:,:,i)),'S',shape(arrayin)
+     ierr = cmor_write( &
+          var_id        = myvar, &
+          data          = arrayin(:,:,:,i), &
+          ntimes_passed = 1,   &
+          time_vals     = mydims%values(i:i),  &
+          time_bnds     = mydims%bounds(:,i:i) &
+          )
+  enddo
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    real, dimension(:,:,:,:),intent(inout) :: arrayin
+!    integer, dimension(ndim)
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(23,*) (current%name)
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(23,*) (current%units)
+       read(23,*) (current%values(j),j=1,n)
+       read(23,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_4d_d_big_array_2.f90 b/Test/old_cmor_tables/mytest_4d_d_big_array_2.f90
new file mode 100644
index 0000000..49a21e2
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_4d_d_big_array_2.f90
@@ -0,0 +1,204 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1)*dimlength(2)*5*dimlength(3)*dimlength(4)))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+  bigarray=666. ! initialize bigarray at some bad value
+  ierr=1
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(2)
+           do i = 1, dimlength(1)
+              bigarray(ierr)=arrayin(i,j,k,l)
+              ierr=ierr+1
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="atm" )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='30 days')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray, &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_4d_d_big_array_3.f90 b/Test/old_cmor_tables/mytest_4d_d_big_array_3.f90
new file mode 100644
index 0000000..b62c229
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_4d_d_big_array_3.f90
@@ -0,0 +1,204 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:,:,:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1),dimlength(2),dimlength(3),dimlength(4),5))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+  bigarray=666. ! initialize bigarray at some bad value
+  ierr=1
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(2)
+           do i = 1, dimlength(1)
+              bigarray(i,j,k,l,1)=arrayin(i,j,k,l)
+              ierr=ierr+1
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing = 'atm' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='30 days')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray(:,:,:,:,1), &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_4d_d_big_array_4.f90 b/Test/old_cmor_tables/mytest_4d_d_big_array_4.f90
new file mode 100644
index 0000000..3ddcbeb
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_4d_d_big_array_4.f90
@@ -0,0 +1,203 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: smallarray(:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(smallarray(dimlength(1)+5,dimlength(3)+6,dimlength(4)+7))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(smallarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="pcmdi-08a", &
+       forcing='co2' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+  print*, 'Test Code: bounds:',current%bounds,current%units
+      myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds, &
+          interval='1 month')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+do i=1,current%n
+  smallarray=666. ! initialize smallarray at some bad value
+  ierr=1
+  !put time i into it
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(1)
+           smallarray(j,k,l)=arrayin(j,i,k,l)
+        enddo
+     enddo
+  enddo
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = smallarray, &
+       ntimes_passed = 1 &
+       )
+enddo
+ierr = cmor_close(myvar)
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_4d_d_big_array_5.f90 b/Test/old_cmor_tables/mytest_4d_d_big_array_5.f90
new file mode 100644
index 0000000..0a8ecab
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_4d_d_big_array_5.f90
@@ -0,0 +1,201 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:,:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1)+10,dimlength(2)+10,dimlength(3)+10,dimlength(4)+10))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array contiguous fortran order means faster moving is first element'
+  bigarray=666. ! initialize bigarray at some bad value
+  ierr=1
+  do l = 1, dimlength(4)
+     do k = 1, dimlength(3)
+        do j = 1, dimlength(2)
+           do i = 1, dimlength(1)
+              bigarray(i,j,k,l)=arrayin(i,j,k,l)
+              ierr=ierr+1
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id='pcmdi-08a', &
+       forcing='atm' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found','with ',current%n,'times'
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds, &
+          interval='31 days')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_4d_r.f90 b/Test/old_cmor_tables/mytest_4d_r.f90
new file mode 100644
index 0000000..8e99756
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_4d_r.f90
@@ -0,0 +1,185 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+!  double precision, allocatable, dimension(:,:,:,:):: arrayin
+  real, allocatable, dimension(:,:,:,:):: arrayin
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  print*,'allocatedat:',shape(arrayin),dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  print*,'CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id="pcmdi-a08",forcing="CO2")
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Name:',trim(adjustl(current%name))
+!!$     print*, current%units
+!!$     print*, current%n,size(current%values)
+!!$     print*, current%values(1:min(4,size(current%values)))
+!!$     print*, current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'time found'
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='1 month')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'before:', shape(arrayin),mydims%n
+!!$  print*,'before:', shape(arrayin(:,i,:))
+!!$  print*, 'time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'values:',current%values
+print*, 'bounds:',current%bounds
+print*, 'N:',current%n
+  ierr =  cmor_write( &
+       myvar, &
+       arrayin, &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+!    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    real, dimension(:,:,:,:),intent(inout) :: arrayin
+!    integer, dimension(ndim)
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'NAME is:',current%name,trim(adjustl(mydims%name))
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print* ,trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/mytest_4d_r_big_array.f90 b/Test/old_cmor_tables/mytest_4d_r_big_array.f90
new file mode 100644
index 0000000..48d5bd9
--- /dev/null
+++ b/Test/old_cmor_tables/mytest_4d_r_big_array.f90
@@ -0,0 +1,202 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current
+  integer ndim,i,j,ntot,k,l
+  double precision, allocatable, dimension(:,:,:,:):: arrayin
+!  real, allocatable, dimension(:,:,:,:):: arrayin
+  double precision, allocatable :: bigarray(:,:,:,:)
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  real amin,amax,mymiss
+
+  print*, 'Test Code: hi'
+  filein='Test/ta_4D_r.asc'
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength)
+  allocate(myaxis(ndim))
+  allocate(arrayin(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+  allocate(bigarray(dimlength(1)+10,dimlength(2)+10,dimlength(3)+10,dimlength(4)+10))
+  print*,'Test Code: allocate data    :',shape(arrayin),'dims:',dimlength(1),dimlength(2),dimlength(3),dimlength(4)
+  print*,'Test Code: allocate data big:',shape(bigarray)
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  call read_ascii(23,mydims, ndim,ntot,arrayin)
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+
+  print*, 'Test Code: putting everything into the big array'
+  bigarray=666. ! initialize bigarray at some bad value
+  do i = 1, dimlength(1)
+     do j = 1, dimlength(2)
+        do k = 1, dimlength(3)
+           do l = 1, dimlength(4)
+              bigarray(i,j,k,l)=arrayin(i,j,k,l)
+           enddo
+        enddo
+     enddo
+  enddo
+
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="atm" )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i,'AAAAAAA*************************************************************************'
+     print*, 'Test Code: Name:',trim(adjustl(current%name))
+!!$     print*, 'Test Code: ',current%units
+!!$     print*, 'Test Code: ',current%n,size(current%values)
+!!$     print*, 'Test Code: ',current%values(1:min(4,size(current%values)))
+!!$     print*, 'Test Code: ',current%bounds(1:2,1:min(4,size(current%values)))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+          interval='1 month')
+     else
+     myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+          table_entry=current%name,&
+          units=current%units,&
+          length=current%n,&
+          coord_vals=current%values,&
+          cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+
+  print*,'Test Code: CMOR VARCMOR VARCMOR VARCMOR'
+
+  mymiss=1.e20
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       'ta',&
+       'K',&
+       myaxis,&
+       missing_value=mymiss)
+
+!! figures out length of dimension other than time
+
+  j=ntot/mydims%n
+!!$  print*, 'Test Code: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'
+!!$  print*,'Test Code: before:', shape(arrayin),mydims%n
+!!$  print*,'Test Code: before:', shape(arrayin(:,i,:))
+!!$  print*, 'Test Code: time before:',mydims%next%values(i:i)
+  current=>mydims%next%next
+print*, 'Test Code: values:',current%values
+print*, 'Test Code: bounds:',current%bounds
+print*, 'Test Code: N:',current%n
+  ierr = cmor_write( &
+       var_id        = myvar, &
+       data          = bigarray, &
+       ntimes_passed = current%n, &
+       time_vals     = current%values,  &
+       time_bnds     = current%bounds &
+       )
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    read(file_id,'(i8)') ndim
+!!$    allocate(dimlength(ndim))
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I8)') tmp
+!!$print*,'Test Code: allocatedat:',tmp
+       dimlength(5-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+!    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name,trim(adjustl(mydims%name))
+       read(file_unit,'(A)') current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: ',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+print*, 'Test Code: arrayin shape:',shape(arrayin)
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+print*, 'Test Code: done!'
+print* ,'Test Code: ',trim(adjustl(mydims%name))
+  end subroutine read_ascii
+
+end program main
+
diff --git a/Test/old_cmor_tables/rewrite_harvardf_data.f90 b/Test/old_cmor_tables/rewrite_harvardf_data.f90
new file mode 100644
index 0000000..68651ce
--- /dev/null
+++ b/Test/old_cmor_tables/rewrite_harvardf_data.f90
@@ -0,0 +1,113 @@
+      program rewrite_harvardf_data
+
+!  Use CMOR routines to rewrite Harvard Forest obs data into CF-standard netCDF.
+!  Start with data in easy-to-read ASCII text (Mathematica input) format, which
+!  was produced by the script read_harvard_forest_obs_dat.py.
+
+!  Note: first line of each input data file is ASCII text to be skipped over.
+
+!		Curt Covey		January 2006
+
+USE cmor_users_functions
+
+      character(len = 25) :: input_file   = 'Test/tas_harvardf.txt'
+      character(len = 20) :: output_file  = 'tas_harvardf.nc'
+      character(len = 20) :: units_string = 'K'
+!     character(len = 20) :: input_table  = 'IPCC_test_table_A'
+!!$      character(len = 20) :: input_table  = 'IPCC_table_A2'
+      character(len = 20) :: input_table  = 'Test/Curts_table'
+
+      character :: first_line    ! throwaway
+
+      integer   :: iaxis(3)      ! identifier for axes (time, latitude, longitude)
+
+!!$      integer, parameter :: ndatalines = 4383 ! # lines in file that contain data
+      integer, parameter :: ndatalines = 10 ! # lines in file that contain data
+                                              ! ( = total # lines in file - 1)
+      integer, parameter :: np1 = ndatalines + 1
+
+      double precision      :: lat(1)        ! single-member array to hold latitude
+      double precision      :: lon(1)        ! single-member array to hold longitude
+      double precision      :: t(ndatalines) ! array to hold time coordinate
+      double precision      :: tbounds(np1)  ! array to hold time coordinate cell bounds
+      real      :: x(ndatalines,1,1) ! array to hold data from each input data file
+!    -Harvard Forest is located at 42.5 deg N, 72.2 deg W ...
+      lat(1) = 42.5d0
+      lon(1) = -72.2d0
+!     ... and is 3000 acres ~ a circle with radius of 0.02 deg lat/lon:
+      latlonrad = 0.02
+      do i = 1, ndatalines
+         t(i)       = i - 1.0  ! time coord  = "days since" =  0,       1, ...
+         tbounds(i) = i - 1.5  ! time bounds =           -0.5,    +0.5,    ...
+      enddo
+      tbounds(np1) = ndatalines - 0.5
+
+      print *, 'Opening ', input_file, '...'
+      open(10, file = input_file)
+      read(10, '(A)') first_line
+      print    '(A)', 'First line begins with: ', first_line
+      do i = 1, ndatalines
+         read(10, '(F6.2)') x(i,1,1)
+!        print *, x(i,1,1)
+      enddo
+
+      print *, 'Initializing CMOR ...'
+      ierrorflag = cmor_setup(netcdf_file_action = 'replace')
+
+      print *, 'Identifying output data sets for CMOR ...'
+      ierrorflag = cmor_dataset(                               &
+                      outpath       = 'Test',                    &
+                      experiment_id =                          &
+      'climate of the 20th Century experiment (20C3M)',        &
+                      institution   =                          &
+      'Berkeley CAS (Center for Atmospheric Science)',         &
+                      source        =                          &
+      'ftp://ftp.as.harvard.edu/pub/nigec/HU_Wofsy/hf_data',   &
+                      calendar      = 'gregorian',             &
+                      contact       =                          &
+      'Jasmin John, Berkeley CAS <jjohn at berkeley.edu>')
+
+!     print *, ' ** Time coordinate vector:', t
+!     print *, ' ** Time bounds vector:',     tbounds
+
+      print *, 'Defining coordinates for CMOR output data ...',t
+      iaxis(1)   = cmor_axis(                                  &
+                      table       = input_table,               &
+                      table_entry = 'time',                    &
+                      units       = 'days since 1992-1-1',     &
+                      length      = ndatalines,                &
+                      coord_vals  = t,                         &
+                      cell_bounds = tbounds)
+
+      iaxis(2)   = cmor_axis(                                  &
+                      table       = input_table,               &
+                      table_entry = 'latitude',                &
+                      units       = 'degrees_north',           &
+                      length      = 1,                         &
+                      coord_vals  = lat)                       
+
+      iaxis(3)   = cmor_axis(                                  &
+                      table       = input_table,               &
+                      table_entry = 'longitude',               &
+                      units       = 'degrees_east',            &
+                      length      = 1,                         &
+                      coord_vals  = lon)
+
+      print *, 'Defining CMOR output data variables ...'
+      ivarb     =  cmor_variable(                              &
+                      table       = input_table,               &
+                      table_entry = 'tas',                     &
+                      units       = units_string,              &
+                      axis_ids    = iaxis)
+
+!!$      print *, ' ** Data vector:', x
+
+      print *, 'Writing CMOR output ...',shape(x)
+      ierrorflag = cmor_write(                                 &
+                      var_id    = ivarb,                       &
+                      data      = x(:,1,1))
+
+      print *, 'Closing file(s) created by CMOR ...'
+      ierrorflag = cmor_close()
+
+      end program rewrite_harvardf_data
diff --git a/Test/old_cmor_tables/test1.f90 b/Test/old_cmor_tables/test1.f90
new file mode 100644
index 0000000..f6d2b20
--- /dev/null
+++ b/Test/old_cmor_tables/test1.f90
@@ -0,0 +1,473 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+    
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             field(k,i,j) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          field(j,i) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '',       '' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="pcmdi-08a", &
+       forcing="co2")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis3d_ids(3) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(2) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(3)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='CMOR_SAMPLE_TABLE',  &
+          table_entry=entry3d(m),     &
+!!$          file_suffix='1979-2001',    &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='CMOR_SAMPLE_TABLE',  & 
+          table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/test2.f90 b/Test/old_cmor_tables/test2.f90
new file mode 100644
index 0000000..b6a0acb
--- /dev/null
+++ b/Test/old_cmor_tables/test2.f90
@@ -0,0 +1,477 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i, irev
+    
+    DO i = 1, SIZE(alons)
+       irev = SIZE(alons)+1-i
+       alons(irev) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,irev) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,irev) = (i - 0.5)*360./SIZE(alons)
+       print*, i,irev,alons(irev),bnds_lon(1,irev),bnds_lon(2,irev)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k, irev
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             irev = SIZE(field, 2) + 1 - i
+             field(k,irev,j) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j, irev
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          irev = SIZE(field, 2) + 1 - i
+          field(j,irev) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '',       '' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' , &
+       model_id="pcmdi-01a",forcing="atm")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis3d_ids(3) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)     
+  print*, 'alons:',alons         
+  print*, 'blons:',bnds_lon         
+  axis3d_ids(2) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(3)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='CMOR_SAMPLE_TABLE',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='CMOR_SAMPLE_TABLE',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                file_suffix='User-suffix-1979-2001',    &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/test3.f90 b/Test/old_cmor_tables/test3.f90
new file mode 100644
index 0000000..4da8723
--- /dev/null
+++ b/Test/old_cmor_tables/test3.f90
@@ -0,0 +1,481 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i, irev, ioff
+    
+    DO i = 1, SIZE(alons)
+       irev = SIZE(alons)+1-i
+       ioff = irev +2
+       if (ioff>SIZE(alons)) ioff = ioff - SIZE(alons)
+       alons(ioff) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,ioff) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,ioff) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k, irev, ioff
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             irev = SIZE(field, 2) + 1 - i
+             ioff = irev + 2
+             IF (ioff > SIZE(field,2)) ioff = ioff - SIZE(field,2)
+             field(k,ioff,j) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j, irev, ioff
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          irev = SIZE(field, 2) + 1 - i
+          ioff = irev + 2
+          IF (ioff > SIZE(field,2)) ioff = ioff - SIZE(field,2)
+         field(j,ioff) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '    ',       '    ' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' , &
+       model_id="pcmdi-08a",forcing="atm")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis3d_ids(3) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(2) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)           
+  axis3d_ids(1) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='30 days')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(3)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='CMOR_SAMPLE_TABLE',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='CMOR_SAMPLE_TABLE',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                file_suffix='1979-2001',    &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                file_suffix='1979-2001',    &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/test4.f90 b/Test/old_cmor_tables/test4.f90
new file mode 100644
index 0000000..3d7a5f8
--- /dev/null
+++ b/Test/old_cmor_tables/test4.f90
@@ -0,0 +1,475 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/main_prog.f90 -IModules -L/work/Unidata/lib -ludunits -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/main_prog.f90 -L/pcmdi/charles_work/Unidata/lib -ludunits -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+             if (TRIM(ADJUSTL(varname)).eq.'T') field(i,j,k) = field(i,j,k)*1.8 - 459.67
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'degF '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '    ',       '    ' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  character(256) outputpath
+
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' , model_id="pcmdi-08a", &
+       forcing = "atm")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis3d_ids(2) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(3) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='CMOR_SAMPLE_TABLE',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='31 days')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(1)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='CMOR_SAMPLE_TABLE',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='CMOR_SAMPLE_TABLE',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        call cmor_create_output_path(var3d_ids(m),outputpath)
+        print*, 'Test Code: we are dumping this varialbe ',var3d_ids(m),'to:',outputpath
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        call cmor_create_output_path(var2d_ids(m),outputpath)
+        print*, 'Test Code: we are dumping this varialbe ',var2d_ids(m),'to:',outputpath
+
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/test_3h.f90 b/Test/old_cmor_tables/test_3h.f90
new file mode 100644
index 0000000..5e14471
--- /dev/null
+++ b/Test/old_cmor_tables/test_3h.f90
@@ -0,0 +1,580 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*3
+    time_bnds(1,1) = (it-1)*3.
+    time_bnds(2,1) = it*3.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 3.2
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ','PSURF   ', 'TSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=10), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2     ', 'kg m-2 s-1', 'K         ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'pr   ',  'tas  ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, itim1
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace',logfile='test_3h.LOG')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="CO2" )
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='IPCC_table_A3',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='IPCC_table_A3',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+!!$  ipres = cmor_axis(  &
+!!$       table='IPCC_table_A3',    &
+!!$       table_entry='pressure',       &
+!!$       units='Pa',                   &
+!!$       length=lev,                   &
+!!$       coord_vals=plevs)
+!!$
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_table_A3',    &
+       table_entry='time',           &
+       units='hours since 2030-1-1',  &
+       length=ntimes,                &
+       interval='3 hours')
+
+  itim1 = cmor_axis(  &
+       table='IPCC_table_A3',    &
+       table_entry='time1',           &
+       units='hours since 2030-1-1',  &
+       length=ntimes)
+!!$  
+!!$  !  define model eta levels (although these must be provided, they will
+!!$  !    actually be replaced by a+b before writing the netCDF file)
+!!$  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+!!$  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+!!$
+!!$  ilev = cmor_axis(  &
+!!$       table='IPCC_table_A3',    &
+!!$       table_entry='standard_hybrid_sigma',       &
+!!$       length=lev,                   &
+!!$       coord_vals=zlevs,             &
+!!$       cell_bounds=zlev_bnds)
+!!$
+!!$  !   define z-factors needed to transform from model level to pressure
+!!$  p0 = 1.e5
+!!$  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+!!$  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+!!$
+!!$  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+!!$  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+!!$
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                      &
+!!$       zfactor_name='p0',                  &
+!!$       units='Pa',                         &
+!!$       zfactor_values = p0)
+!!$
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                       & 
+!!$       zfactor_name='b',                    &
+!!$       axis_ids= (/ ilev /),                &
+!!$       zfactor_values = b_coeff,            &
+!!$       zfactor_bounds = b_coeff_bnds  )
+!!$
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                       &
+!!$       zfactor_name='a',                    &
+!!$       axis_ids= (/ ilev /),                &
+!!$       zfactor_values = a_coeff,            &
+!!$       zfactor_bounds = a_coeff_bnds )
+!!$
+!!$  zfactor_id = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                         &
+!!$       zfactor_name='ps',                     &
+!!$       axis_ids=(/ ilon, ilat, itim /),       &
+!!$       units='Pa' )
+!!$
+!!$  !  Define the only field to be written that is a function of model level
+!!$  !    (appearing in IPCC table A1c)
+!!$
+!!$  var3d_ids(1) = cmor_variable(    &
+!!$       table='IPCC_table_A3',  &
+!!$       table_entry=entry3d(1),     &
+!!$       units=units3d(1),           &
+!!$       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+!!$       missing_value=1.0e28, &
+!!$       original_name=varin3d(1))
+!!$  
+!!$  !  Define variables appearing in IPCC table A1c that are a function of pressure
+!!$  !         (3-d variables)
+!!$  
+!!$  DO m=2,n3d
+!!$     var3d_ids(m) = cmor_variable(    &
+!!$          table='IPCC_table_A3',  &
+!!$          table_entry=entry3d(m),     &
+!!$          units=units3d(m),           &
+!!$          axis_ids=(/ ilon, ilat, ipres, itim /), &
+!!$          missing_value=1.0e28,       &
+!!$          original_name=varin3d(m))
+!!$  ENDDO
+!!$  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+
+     IF (m==2) THEN
+
+        var2d_ids(m) = cmor_variable(    &
+             table='IPCC_table_A3',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon, ilat, itim /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+
+     ELSE
+        var2d_ids(m) = cmor_variable(    &
+             table='IPCC_table_A3',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon, ilat, itim1 /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+
+     END IF
+
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+!!$    call read_3d_input_files(it, varin3d(1), data3d)
+!!$
+!!$    error_flag = cmor_write(                                  &
+!!$         var_id        = var3d_ids(1),                        &
+!!$         data          = data3d,                              &
+!!$         ntimes_passed = 1,                                   &
+!!$         time_vals     = time,                                &
+!!$         time_bnds     = bnds_time   )
+!!$
+!!$    call read_2d_input_files(it, varin2d(4), data2d)                  
+!!$
+!!$    error_flag = cmor_write(                                  &
+!!$         var_id        = zfactor_id,                          &
+!!$         data          = data2d,                              &
+!!$         ntimes_passed = 1,                                   &
+!!$         time_vals     = time,                                &
+!!$         time_bnds     = bnds_time,                           &
+!!$         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+!!$    DO m=2,n3d
+!!$        
+!!$        ! The user must write the code that fills the arrays of data
+!!$        ! that will be passed to CMOR.  The following line is simply a
+!!$        ! a place-holder for the user's code, which should replace it.
+!!$
+!!$        call read_3d_input_files(it, varin3d(m), data3d)
+!!$       
+!!$        ! append a single time sample of data for a single field to 
+!!$        ! the appropriate netCDF file.
+!!$        
+!!$        error_flag = cmor_write(                                  &
+!!$             var_id        = var3d_ids(m),                        &
+!!$             data          = data3d,                              &
+!!$             ntimes_passed = 1,                                   &
+!!$             time_vals     = time,                                &
+!!$             time_bnds     = bnds_time  )
+!!$        
+!!$        IF (error_flag < 0) THEN
+!!$           ! write diagnostic messages to standard output device
+!!$           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+!!$                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+!!$           write(*,*) ' Was processing time sample: ', time
+!!$                      
+!!$        END IF
+!!$
+!!$     END DO
+!!$     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        IF (m==2) THEN
+           print*, 'Passing times (1):',time
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = data2d,                              &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+        ELSE
+            print*, 'Passing times (2):',time
+          error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = data2d,                              &
+                ntimes_passed = 1,                                   &
+                time_vals     = time)
+        END IF
+
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/old_cmor_tables/test_any_from_asc.f90 b/Test/old_cmor_tables/test_any_from_asc.f90
new file mode 100644
index 0000000..d4a4f2c
--- /dev/null
+++ b/Test/old_cmor_tables/test_any_from_asc.f90
@@ -0,0 +1,348 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current,ptimes
+  integer ndim,i,j,ntot
+!  real, allocatable, dimension(:,:,:):: arrayin
+  real, allocatable, dimension(:,:):: arrayin2d
+  real, allocatable, dimension(:,:,:):: arrayin3d
+  real, allocatable, dimension(:,:,:,:):: arrayin4d
+  real, allocatable, dimension(:,:,:,:,:):: arrayin5d
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  character(50) :: var,units
+
+  print*, 'Test Code: Welcome to the general from ascii testing code'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength,var,units)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  if (ndim.eq.2) then
+     allocate(arrayin2d(dimlength(1),dimlength(2)))
+     call read_ascii2d(23,mydims, ndim,ntot,arrayin2d)
+     print*,'Test Code: allocate data:',shape(arrayin2d)
+  else if (ndim.eq.3) then
+     allocate(arrayin3d(dimlength(1),dimlength(2),dimlength(3)))
+     call read_ascii3d(23,mydims, ndim,ntot,arrayin3d)
+     print*,'Test Code: allocate data:',shape(arrayin3d)
+  else if (ndim.eq.4) then
+     allocate(arrayin4d(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+     call read_ascii4d(23,mydims, ndim,ntot,arrayin4d)
+     print*,'Test Code: allocate data:',shape(arrayin4d)
+  else if (ndim.eq.5) then
+     call read_ascii5d(23,mydims, ndim,ntot,arrayin5d)
+     allocate(arrayin5d(dimlength(1),dimlength(2),dimlength(3),dimlength(4),dimlength(5)))
+     print*,'Test Code: allocate data:',shape(arrayin5d)
+  endif
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id='pcmdi-01a',forcing='atm' )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i
+     print*, 'Test Code: Axis Name:',trim(adjustl(current%name))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        ptimes => current
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+             interval='1 month')
+     else
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+  
+  print*,'Test Code: CMOR VAR'
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       var,&
+       units,&
+       myaxis,&
+       missing_value=1.e20)
+
+  !! figures out length of dimension other than time
+
+  print*, 'Test Code: time before:',ptimes%values(i:i)
+  if (ndim.eq.2) then 
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin2d(:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin2d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.3) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin3d(:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once',ptimes%units,ptimes%values
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin3d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.4) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin4d(:,:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once',ptimes%units
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin4d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin5d(:,:,:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin5d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  endif
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength,var,units)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    character(50), intent(inout) :: var,units
+    read(file_id,'(A)') var
+    read(file_id,'(A)') units
+    read(file_id,'(I4)') ndim
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii2d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((arrayin(j,k),j=1,size(arrayin,1)),k=1,size(arrayin,2))
+  end subroutine read_ascii2d
+  subroutine read_ascii3d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+  end subroutine read_ascii3d
+  subroutine read_ascii4d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+  end subroutine read_ascii4d
+  subroutine read_ascii5d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m,o
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((((arrayin(j,k,l,m,o),j=1,size(arrayin,1)),&
+         k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4)),&
+         o=1,size(arrayin,5))
+  end subroutine read_ascii5d
+
+
+end program main
+
diff --git a/Test/old_cmor_tables/test_any_from_asc_d.f90 b/Test/old_cmor_tables/test_any_from_asc_d.f90
new file mode 100644
index 0000000..8538ce2
--- /dev/null
+++ b/Test/old_cmor_tables/test_any_from_asc_d.f90
@@ -0,0 +1,348 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current,ptimes
+  integer ndim,i,j,ntot
+!  double precision, allocatable, dimension(:,:,:):: arrayin
+  double precision, allocatable, dimension(:,:):: arrayin2d
+  double precision, allocatable, dimension(:,:,:):: arrayin3d
+  double precision, allocatable, dimension(:,:,:,:):: arrayin4d
+  double precision, allocatable, dimension(:,:,:,:,:):: arrayin5d
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  character(50) :: var,units
+
+  print*, 'Test Code: Welcome to the general from ascii testing code'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength,var,units)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  if (ndim.eq.2) then
+     allocate(arrayin2d(dimlength(1),dimlength(2)))
+     call read_ascii2d(23,mydims, ndim,ntot,arrayin2d)
+     print*,'Test Code: allocate data:',shape(arrayin2d)
+  else if (ndim.eq.3) then
+     allocate(arrayin3d(dimlength(1),dimlength(2),dimlength(3)))
+     call read_ascii3d(23,mydims, ndim,ntot,arrayin3d)
+     print*,'Test Code: allocate data:',shape(arrayin3d)
+  else if (ndim.eq.4) then
+     allocate(arrayin4d(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+     call read_ascii4d(23,mydims, ndim,ntot,arrayin4d)
+     print*,'Test Code: allocate data:',shape(arrayin4d)
+  else if (ndim.eq.5) then
+     call read_ascii5d(23,mydims, ndim,ntot,arrayin5d)
+     allocate(arrayin5d(dimlength(1),dimlength(2),dimlength(3),dimlength(4),dimlength(5)))
+     print*,'Test Code: allocate data:',shape(arrayin5d)
+  endif
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' ,   &
+       model_id = "pcmdi-01a",forcing="atm")
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i
+     print*, 'Test Code: Axis Name:',trim(adjustl(current%name))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        ptimes => current
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+             interval='1 month')
+     else
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+  
+  print*,'Test Code: CMOR VAR'
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       var,&
+       units,&
+       myaxis,&
+       missing_value=1.e20)
+
+  !! figures out length of dimension other than time
+
+  print*, 'Test Code: time before:',ptimes%values(i:i)
+  if (ndim.eq.2) then 
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin2d(:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin2d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.3) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin3d(:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin3d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.4) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin4d(:,:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin4d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin5d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin5d(:,:,:,:,i:i), &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  endif
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength,var,units)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    character(50), intent(inout) :: var,units
+    read(file_id,'(A)') var
+    read(file_id,'(A)') units
+    read(file_id,'(I4)') ndim
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii2d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((arrayin(j,k),j=1,size(arrayin,1)),k=1,size(arrayin,2))
+  end subroutine read_ascii2d
+  subroutine read_ascii3d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+  end subroutine read_ascii3d
+  subroutine read_ascii4d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+  end subroutine read_ascii4d
+  subroutine read_ascii5d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m,o
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((((arrayin(j,k,l,m,o),j=1,size(arrayin,1)),&
+         k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4)),&
+         o=1,size(arrayin,5))
+  end subroutine read_ascii5d
+
+
+end program main
+
diff --git a/Test/old_cmor_tables/test_any_from_asc_i.f90 b/Test/old_cmor_tables/test_any_from_asc_i.f90
new file mode 100644
index 0000000..df5b4c2
--- /dev/null
+++ b/Test/old_cmor_tables/test_any_from_asc_i.f90
@@ -0,0 +1,348 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current,ptimes
+  integer ndim,i,j,ntot
+!  integer, allocatable, dimension(:,:,:):: arrayin
+  integer, allocatable, dimension(:,:):: arrayin2d
+  integer, allocatable, dimension(:,:,:):: arrayin3d
+  integer, allocatable, dimension(:,:,:,:):: arrayin4d
+  integer, allocatable, dimension(:,:,:,:,:):: arrayin5d
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  character(50) :: var,units
+
+  print*, 'Test Code: Welcome to the general from ascii testing code'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength,var,units)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  if (ndim.eq.2) then
+     allocate(arrayin2d(dimlength(1),dimlength(2)))
+     call read_ascii2d(23,mydims, ndim,ntot,arrayin2d)
+     print*,'Test Code: allocate data:',shape(arrayin2d)
+  else if (ndim.eq.3) then
+     allocate(arrayin3d(dimlength(1),dimlength(2),dimlength(3)))
+     call read_ascii3d(23,mydims, ndim,ntot,arrayin3d)
+     print*,'Test Code: allocate data:',shape(arrayin3d)
+  else if (ndim.eq.4) then
+     allocate(arrayin4d(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+     call read_ascii4d(23,mydims, ndim,ntot,arrayin4d)
+     print*,'Test Code: allocate data:',shape(arrayin4d)
+  else if (ndim.eq.5) then
+     call read_ascii5d(23,mydims, ndim,ntot,arrayin5d)
+     allocate(arrayin5d(dimlength(1),dimlength(2),dimlength(3),dimlength(4),dimlength(5)))
+     print*,'Test Code: allocate data:',shape(arrayin5d)
+  endif
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id = "pcmdi-08a", forcing="co2" )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i
+     print*, 'Test Code: Axis Name:',trim(adjustl(current%name))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        ptimes => current
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+             interval='1 month')
+     else
+        myaxis(ndim-i)=cmor_axis('CMOR_SAMPLE_TABLE', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+  
+  print*,'Test Code: CMOR VAR',var,units
+  myvar=cmor_variable('CMOR_SAMPLE_TABLE',&
+       var,&
+       units,&
+       myaxis,&
+       missing_value=120)
+
+  !! figures out length of dimension other than time
+
+  print*, 'Test Code: time before:',ptimes%values(i:i)
+  if (ndim.eq.2) then 
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin2d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin2d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.3) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin3d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin3d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.4) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin4d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin4d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin5d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin5d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  endif
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength,var,units)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+     character(50), intent(inout) :: var,units
+    read(file_id,'(A)') var
+    read(file_id,'(A)') units
+   read(file_id,'(I4)') ndim
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii2d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((arrayin(j,k),j=1,size(arrayin,1)),k=1,size(arrayin,2))
+  end subroutine read_ascii2d
+  subroutine read_ascii3d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+  end subroutine read_ascii3d
+  subroutine read_ascii4d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+  end subroutine read_ascii4d
+  subroutine read_ascii5d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m,o
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((((arrayin(j,k,l,m,o),j=1,size(arrayin,1)),&
+         k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4)),&
+         o=1,size(arrayin,5))
+  end subroutine read_ascii5d
+
+
+end program main
+
diff --git a/Test/old_cmor_tables/test_cmor_grid_alejandro.f90 b/Test/old_cmor_tables/test_cmor_grid_alejandro.f90
new file mode 100644
index 0000000..155a44c
--- /dev/null
+++ b/Test/old_cmor_tables/test_cmor_grid_alejandro.f90
@@ -0,0 +1,166 @@
+PROGRAM test_cmor_grid
+   USE cmor_users_functions
+
+   IMPLICIT NONE
+
+   INTEGER, PARAMETER :: n_sections = 3
+   INTEGER, PARAMETER :: n_points = 10
+   INTEGER, PARAMETER :: n_lev = 4
+   real, parameter :: R_UNDEF = -1.0E+30
+   INTEGER :: i, j, k, var_id,option
+!    REAL :: x(n_lev,n_points,n_sections)
+   REAL :: x(n_points,n_sections,n_lev)
+   real :: z_ax(n_lev),z_bounds(2,n_points)
+   double precision :: profile_ax(n_points),section_ax(n_sections)
+   real :: lat(n_points,n_sections),lon(n_points,n_sections)
+   real :: lat_bounds(4,n_points,n_sections),lon_bounds(4,n_points,n_sections)
+   character(len=128) :: table='Test/CMIP5_cf3hr.txt'
+   character(len=32) :: sec_units='days since 2000-01-01'
+   integer :: error_flag,height_axid,time_axid,profile_axid,grid_id,section_axid
+   real :: lat_step,lon_step
+   integer latvar_id,lonvar_id
+   integer blatvar_id,blonvar_id
+
+   print *, 'Option (0,1,other)?'
+   read(*,*) option
+
+   if (option == 0) then ! 1D grid, no time dimension
+      table='Test/CMIP5_cf3hr_0.txt'
+      sec_units='1'
+   endif
+   if (option == 1) then ! 1D grid, section as time dimension
+      table='Test/CMIP5_cf3hr_1.txt'
+      sec_units='days since 2000-01-01'
+   endif
+   
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Fill in variables with some data
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   do k=1,n_sections
+     do j=1,n_points
+       do i=1,n_lev
+          x(j,k,i) = k*1000000 + 1000*j + i
+       enddo
+     enddo
+   enddo
+
+   ! Values for section axis
+   do i=1,n_sections
+     section_ax(i) = float(i)
+   enddo
+
+   ! Values for profile axis
+   do i=1,n_points
+     profile_ax(i) = float(i)
+   enddo
+      
+   ! Height of vertical levels
+   do i=1,n_lev
+     z_ax(i) = 240.0 + 480.0*(i-1)
+     z_bounds(1,i) = z_ax(i) - 240.0
+     z_bounds(2,i) = z_ax(i) + 240.0
+   enddo
+    
+   lat_step = 180.0/(n_points+2)
+   lon_step = 360.0/(n_points+2)
+   do i=1,n_points
+      lat(i,:) = -90.0 + lat_step*0.5 + lat_step*i
+      lon(i,:) =   0.0 + lon_step*0.5 + lon_step*i
+       lat_bounds(1,i,:) = lat(i,:) - lat_step*0.5
+       lat_bounds(2,i,:) = lat(i,:) - lat_step*0.5
+       lat_bounds(3,i,:) = lat(i,:) + lat_step*0.5
+       lat_bounds(4,i,:) = lat(i,:) + lat_step*0.5
+       lon_bounds(1,i,:) = lon(i,:) - lon_step*0.5
+       lon_bounds(2,i,:) = lon(i,:) + lon_step*0.5
+       lon_bounds(3,i,:) = lon(i,:) - lon_step*0.5
+       lon_bounds(4,i,:) = lon(i,:) + lon_step*0.5
+   enddo
+
+
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Specify path for tables and set up other CMOR options
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   error_flag = cmor_setup(inpath='./',netcdf_file_action="replace",create_subdirectories=0)
+
+   print *, '---------------Define dataset'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define dataset as output from COSP, and other model details
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   error_flag = cmor_dataset(outpath='Test/',experiment_id='AMIP',institution='Met Office', &
+                    source='source',calendar='360_day',realization=1,contact='alejandro.bodas at metoffice.gov.uk', &
+                    history='history',comment='En un lugar de la Mancha de cuyo nombre no quiero acordarme', &
+                    references='references',forcing="CH4",model_id="mymod-10a")
+   
+   print *, '---------------Define axis'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define axis
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   profile_axid = cmor_axis(table=table, table_entry='location', units='1', &
+                                                       length=n_points, coord_vals=profile_ax)
+   height_axid  = cmor_axis(table=table, table_entry='height40', units='m', &
+                                                       length=n_lev, coord_vals=z_ax,cell_bounds=z_bounds)
+   section_axid  = cmor_axis(table=table, table_entry='section', units=sec_units, &
+                                                       length=n_sections, coord_vals=section_ax)
+   
+   print *, '---------------Define grid'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define grid
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   if ((option == 0).or.(option == 1)) then
+     grid_id = cmor_grid((/profile_axid/), lat(:,1), lon(:,1))
+   else
+      print*, "AXES FOR GRID: ",(/profile_axid, section_axid/)
+     grid_id = cmor_grid((/profile_axid, section_axid/),nvertices=4)
+     print*, 'got grid:',grid_id
+     !need to add code for defining the lat lon var here
+     latvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='latitude',units='degrees_north')
+     lonvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='longitude',units='degrees_east')
+     blatvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='vertices_latitude',units='degrees_north')
+     blonvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='vertices_longitude',units='degrees_east')
+   endif
+   if (grid_id > 0) then
+        print *,  '*********** Error, grid_id: ', grid_id
+        stop
+   endif
+   
+   print *, '---------------Define variables'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define variables. Fill in dimensions table first if needed
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   if ((option == 0).or.(option == 1)) then
+     var_id = cmor_variable(table=table, table_entry='curtain', units='1', &
+                                 axis_ids=(/grid_id,section_axid,height_axid/), missing_value=R_UNDEF)
+   else
+     var_id = cmor_variable(table=table, table_entry='curtain', units='1', &
+                                 axis_ids=(/grid_id,height_axid/), missing_value=R_UNDEF)
+   endif
+   
+   print *, '---------------Write variables'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Write variables to file
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   if ((option == 0).or.(option == 1)) then
+     error_flag = cmor_write(var_id=var_id, data=x)
+   else
+     error_flag = cmor_write(var_id=var_id, data=x)
+     error_flag = cmor_write(var_id=latvar_id, data=lat, store_with=var_id)
+     error_flag = cmor_write(var_id=lonvar_id, data=lon, store_with=var_id)
+     error_flag = cmor_write(var_id=latvar_id, data=lat, store_with=var_id)
+     error_flag = cmor_write(var_id=lonvar_id, data=lon, store_with=var_id)
+     print*, 'writing blat',blatvar_id
+     error_flag = cmor_write(var_id=blatvar_id, data=lat_bounds, store_with=var_id)
+     print*, 'writing blon',blonvar_id
+     error_flag = cmor_write(var_id=blonvar_id, data=lon_bounds, store_with=var_id)
+   endif
+   if (error_flag /= 0) then
+        print *,  '*********** Error writing variable: ', error_flag
+        stop
+   endif
+   
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Close files
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   error_flag = cmor_close()
+                               
+   
+ END
diff --git a/Test/old_cmor_tables/test_dimensionless.f90 b/Test/old_cmor_tables/test_dimensionless.f90
new file mode 100644
index 0000000..2708171
--- /dev/null
+++ b/Test/old_cmor_tables/test_dimensionless.f90
@@ -0,0 +1,549 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    CASE ('tro3')
+       factor = 1.
+       offset = 0.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             field(k,i,j) = ((SIZE(field, 1) - k)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 2.8
+       offset = 10.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 4       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'tro3 ', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', '1e-9 ',  'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=4), DIMENSION(n3d) :: entry3d = (/ 'cl  ', 'tro3', 'ua  ', 'ta  ' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-a08", &
+       forcing="CO2")
+  
+  !  Define all axes that will be needed
+  
+  ilat = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+
+print*, 'Test Code:',lev,':',plevs
+  ipres = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+print*,'ok'
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='standard_hybrid_sigma',       &
+       units='1',  &
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.2, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .15, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='IPCC_table_A1',      &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilev, ilon, ilat, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='IPCC_table_A1',      &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ipres, ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_table_A1',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/old_cmor_tables/test_fortran_example_00.f90 b/Test/old_cmor_tables/test_fortran_example_00.f90
new file mode 100644
index 0000000..aa2c91d
--- /dev/null
+++ b/Test/old_cmor_tables/test_fortran_example_00.f90
@@ -0,0 +1,481 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim,i
+  real :: missing
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k
+
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  print*,'Test code: done'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="CO2")
+  print*, 'Test code: done 2 lalala'
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+
+  print*, 'Test code: ok calling axis stuff lat'
+  ilat = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  print*, 'Test code: ok calling axis stuff lon',ilat
+  ilon = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  print*, 'Test code: ok calling axis stuff pressure',ilon
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  print*, 'Test code: ok calling axis stuff time',ipres
+  itim = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='30 days')
+
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  print*, 'Test code: ok calling axis stuff lev2',itim
+  ilev = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='standard_hybrid_sigma',       &
+       units="1",   &
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  print*, 'Test code: ok called stuff lev2',ilev
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  p0array(1)=p0
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  print*, 'Test code: zfactor p0'
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  print*, 'Test code: result',error_flag
+  print*, 'Test code: zfactor b'
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  print*, 'Test code: result',error_flag
+  print*, 'Test code: zfactor a'
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  print*, 'Test code: result',error_flag
+  print*, 'Test code: zfactor ps'
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  print*, 'Test code: result',zfactor_id
+  print*, 'Test code: var3d'
+  missing = 1.e28
+  var3d_ids(1) = cmor_variable(    &
+       table='IPCC_test_table_A',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=missing, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  print*, 'Test code: result',var3d_ids(1)
+  DO m=2,n3d
+     print*, 'Test code: var: ',entry3d(m)
+     var3d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=missing,       &
+          original_name=varin3d(m))
+     print*, 'Test code: result',var3d_ids(m)
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     print*, 'Test code: var: ',entry2d(m)
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=missing,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+     print*, 'Test code: result',var2d_ids(m)
+  ENDDO
+
+  PRINT*, 'Test code:  '
+  PRINT*, 'Test code: completed everything up to writing output fields '
+  PRINT*, 'Test code:  '
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         file_suffix ="ftn",                                       &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         file_suffix ="ftn-00",                                       &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    print*, 'Test code: result',error_flag
+   ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             file_suffix ="ftn-00",                                       &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             file_suffix ="ftn-00",                                       &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+
+  error_flag = cmor_close()
+
+end program testing
diff --git a/Test/old_cmor_tables/test_fortran_example_01.f90 b/Test/old_cmor_tables/test_fortran_example_01.f90
new file mode 100644
index 0000000..d0993eb
--- /dev/null
+++ b/Test/old_cmor_tables/test_fortran_example_01.f90
@@ -0,0 +1,334 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: nvert = 4    ! number of time samples to process
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 3       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 4       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim,i
+  real :: missing
+  character(1024) inpath,mapnm
+  character(len=30),dimension(6) ::params =(/ "standard_parallel1            ",&
+       "longitude_of_central_meridian ","latitude_of_projection_origin ",&
+       "false_easting                 ","false_northing                ", &
+       "standard_parallel2            " /)
+  character(len=5) ,dimension(6) :: punits = (/ "     ","     ","     ","     ","     ","     " /)
+  double precision,dimension(6) :: pvalues = (/-20.,175.,13.,8.,0.,20. /)
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k,tables(2),vars(10),axes(10)
+
+  integer pass_axes(2)
+
+  integer :: grid_id
+
+
+  real lon_coords(lon,lat),lat_coords(lon,lat)
+  real lon_vertices(nvert,lon,lat),lat_vertices(nvert,lon,lat)
+  real area(lon,lat)
+  real x(lon),y(lat)
+  
+  real lon0,lat0,delta_lon,delta_lat
+  
+  lon0 = -120.
+  lat0=0.;
+  delta_lon = 10.;
+  delta_lat = 10.;
+  
+!!$  /* first construct grid lon/lat */
+  do j=1,lat
+     y(j)=j
+     do i=1,lon
+        x(i)=i
+        lon_coords(i,j) = lon0+delta_lon*(j+i-1);
+        lat_coords(i,j) = lat0+delta_lat*(j-i-2);
+!!$      /* vertices lon*/
+!!$      k = i*4+j*lon*4+0;
+!!$      printf('i,j,k: %i, %i, %i\n',i,j,k);
+        lon_vertices(1,i,j) = lon_coords(i,j)-delta_lon;
+        lon_vertices(2,i,j) = lon_coords(i,j);
+        lon_vertices(3,i,j) = lon_coords(i,j)+delta_lon;
+        lon_vertices(4,i,j) = lon_coords(i,j);
+!!$      /* vertices lat */
+        lat_vertices(1,i,j) = lat_coords(i,j);
+        lat_vertices(2,i,j) = lat_coords(i,j)-delta_lat;
+        lat_vertices(3,i,j) = lat_coords(i,j);
+        lat_vertices(4,i,j) = lat_coords(i,j)+delta_lat;
+     end do
+  end do
+
+  inpath ='Test'
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  
+    error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="pcmdi-08a", &
+       forcing="CO2")
+
+    tables(1) = cmor_load_table('IPCC_test_table_A')
+    tables(2) = cmor_load_table('IPCC_test_table_Grids')
+
+    axes(1) = cmor_axis(table_entry = 'x', &
+                        units = '1', &
+                        length = lon, &
+                        coord_vals = x)
+    axes(2) = cmor_axis(table_entry = 'y', &
+                        units = '1', &
+                        length = lat, &
+                        coord_vals = y)
+                        
+    grid_id = cmor_grid(axis_ids = axes, &
+                        latitude = lat_coords, &
+                        longitude = lon_coords, &
+                        latitude_vertices = lat_vertices, &
+                        longitude_vertices = lon_vertices)
+    print*, 'Got grid id: ',grid_id
+    
+    mapnm = 'lambert_conformal_conic'
+    error_flag = cmor_set_grid_mapping(grid_id,&
+         mapnm,params,pvalues,punits)
+
+    call cmor_set_table(table_id=tables(2))
+
+     
+    axes(3) = cmor_axis(table = 'IPCC_test_table_A',&
+                        table_entry = 'time',&
+                        units = 'days since 1980',&
+                        length = 2 &
+                        )
+    
+    
+    pass_axes(2) = axes(3)
+    pass_axes(1) = grid_id
+    
+    vars(1) = cmor_variable(table = 'IPCC_test_table_A',&
+                            table_entry = 'hfls',&
+                            units = 'W m-2',&
+                            axis_ids = pass_axes,&
+                            positive = 'down',&
+                            original_name = 'HFLS',&
+                            history = 'no history',&
+                            comment = 'no future'&
+                            )
+    do i=1,ntimes
+       call read_time(i, time(1), bnds_time)
+       print*, 'Test code: writing time:',i,'of',ntimes,time(1)
+       call read_2d_input_files(i, 'LATENT', data2d)
+       error_flag = cmor_write(var_id = vars(1) ,&
+                               data =data2d,&
+                               file_suffix='ftn-01',&
+                               ntimes_passed = 1,&
+                               time_vals = time,&
+                               time_bnds = bnds_time)
+    end do
+   error_flag = cmor_close()
+    
+  end program testing
+  
diff --git a/Test/old_cmor_tables/test_fortran_example_02.f90 b/Test/old_cmor_tables/test_fortran_example_02.f90
new file mode 100644
index 0000000..2680528
--- /dev/null
+++ b/Test/old_cmor_tables/test_fortran_example_02.f90
@@ -0,0 +1,376 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    INTEGER, INTENT(OUT), DIMENSION(:) ::  station
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lons
+    
+    INTEGER :: i, j, k
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    k = 1
+    DO i = 1, SIZE(alons)
+      DO j = 1, SIZE(alats)
+        station(k) = k
+        st_lons(k) = alons(i)
+        st_lats(k) = alats(j)
+        k = k+1
+      END DO   
+    END DO 
+    
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  !------------------------------------------------
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  !------------------------------------------------
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+!=======================================================
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: nst = 12      ! number of stations
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+  INTEGER igrid;
+                          
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  REAL, DIMENSION(lon*lat,lev) :: data2d_st
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  INTEGER, DIMENSION(lon*lat) :: station
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lons
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lats
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, i, ist
+  real :: missing
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k
+
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  print*,'Test code: done'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  print*, 'Test code: done 2 lalala'
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+  
+
+  print*, 'Test code: ok calling axis stuff station'
+  ist = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='station',       &
+       units=' ',        &  
+       length=nst,                   &
+       coord_vals=station )      
+       
+   
+  print*, 'Test code: ok calling axis stuff pressure',ilon
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  print*, 'Test code: ok calling axis stuff time',ipres
+  itim = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='20 minutes')
+
+  
+       
+  igrid = cmor_grid((/ist/), st_lats, st_lons)       
+       
+  write(*,'(a, 12f6.1)'), 'lons: ',st_lons
+  write(*,'(a, 12f6.1)'), 'lats: ',st_lats
+  
+  !===============================================================
+  print*, ' '
+   
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  DO m=1,4
+     print*, 'Test code: var:  ',entry2d(m)
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_S',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ igrid, itim /), &
+          missing_value=missing,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+     print*, 'Test code: result',var2d_ids(m)
+  ENDDO   
+  
+
+  PRINT*, 'Test code:  '
+  PRINT*, 'Test code: completed everything up to writing output fields '
+  PRINT*, 'Test code:  '
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)    
+        k = 1  
+        DO j = 1, lat
+          data1dtest(k:k+lat) = data2d(:,j) 
+          k = k+lat+1 
+        END DO   
+        !write(*,'(a, 12(f8.1,1x))'), entry2d(m), data1dtest            
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data1dtest,                          &
+             file_suffix ="ftn-02",                               &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO 
+     
+     
+  END DO time_loop
+
+  error_flag = cmor_close()
+
+end program testing
diff --git a/Test/old_cmor_tables/test_lots_of_variables.f90 b/Test/old_cmor_tables/test_lots_of_variables.f90
new file mode 100644
index 0000000..804c757
--- /dev/null
+++ b/Test/old_cmor_tables/test_lots_of_variables.f90
@@ -0,0 +1,343 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+    
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+    
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          field(j,i) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n2d = 1       ! number of AMIP Table 2 fields to be
+                                      !     output.
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, PARAMETER :: ntest=400
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(n2d+ntest) :: var2d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+   DOUBLE PRECISION, DIMENSION(5) :: plevs
+ DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+    character (len=200) :: msg,msg2
+
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="pcmdi-08a", &
+       forcing="co2")
+  
+  error_flag  = cmor_set_cur_dataset_attribute("initialization_method","4")
+  error_flag  = cmor_set_cur_dataset_attribute("physics_version","6")
+
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining axes'
+  
+  axis2d_ids(1) = cmor_axis(  &
+       table='IPCC_test_table_As',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids(2) = cmor_axis(  &
+       table='IPCC_test_table_As',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis2d_ids(3) = cmor_axis(  &
+       table='IPCC_test_table_As',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining axes'
+
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,ntest
+     write(msg,*)  m-1
+     msg2 = trim(entry2d(1)(1:4)//adjustl(msg))
+     print*,'Test Code: defining variable: :',msg2
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_As',  & 
+          table_entry=msg2,     & 
+!!$          file_suffix='1979-2001',    &
+          units=units2d(1),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(1),     &
+          original_name=varin2d(1))   
+  ENDDO
+
+  print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  DO m=1,ntest
+     time_loop: DO it=1, ntimes
+        
+        ! In the following loops over the 3d and 2d fields, the user-written    
+        ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+        ! the requested AMIP table 1a and table 2 fields and store them in 
+        ! data3d and data2d, respectively.  In addition a user-written code 
+        ! (read_time) retrieves the time and time-bounds associated with the 
+        ! time sample (in units of 'days since 1970-1-1', consistent with the 
+        ! axis definitions above).  The bounds are set to the beginning and 
+        ! the end of the month retrieved, indicating the averaging period.
+        
+        ! The user must write a code to obtain the times and time-bounds for
+        !   the time slice.  The following line is simply a place-holder for
+        !   the user's code, which should replace it.
+        
+        call read_time(it, time, bnds_time)
+        
+        ! Cycle through the 3-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        
+        
+        ! Cycle through the 2-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(1), data2d)                  
+        
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+             data =          RESHAPE(data2d, (/ lat*lon /)),        &
+             ntimes_passed = 1,              &
+             time_vals =     (/ time /),           &
+             time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+        print*, 'after writing variable, ', var2d_ids(m)
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO time_loop
+     error_flag = cmor_close(var2d_ids(m))
+  END DO
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/test_region.f90 b/Test/old_cmor_tables/test_region.f90
new file mode 100644
index 0000000..a793dfc
--- /dev/null
+++ b/Test/old_cmor_tables/test_region.f90
@@ -0,0 +1,335 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_1d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, bnds_lat)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+      
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_1d_input_files(it, varname, field) 
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('OFLUX')  
+       factor = 1.e14
+       offset = 20.e14
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_1d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM test_region
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: reg = 4       ! number of regions 
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n1d = 1       ! number of IPCC Table O1 fields to be
+                                      !     output.
+  !
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table O1a fields
+  CHARACTER (LEN=5), DIMENSION(n1d) :: &
+                                 varin1d=(/ 'OFLUX' /)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=1), DIMENSION(n1d) :: &
+                                  units1d=(/ 'W' /)
+
+                     ! Corresponding IPCC Table O1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n1d) :: entry1d = (/ 'hfogo' /)
+
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(n1d) :: var1d_ids
+  REAL, DIMENSION(lat,reg) :: data1d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  INTEGER :: ilat, ireg, itim
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, bnds_lat)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)' , model_id="pcmdi-08a", &
+       forcing="CO2")
+  
+  !  Define all axes that will be needed
+  
+  ilat = cmor_axis(  &
+       table='IPCC_test_table_O',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ireg = cmor_axis(  &
+       table='IPCC_test_table_O',        &
+       table_entry='region',         &
+       length=reg,                   &
+       units='none',                 &
+       coord_vals= (/ "atlantic_ocean", "indian_ocean  ", "pacific_ocean ", &
+       "global_ocean  " /) )   
+        
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_test_table_O',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+
+  !  Define variables appearing in IPCC table O1a (functions of lat and reg)
+  
+  DO m=1,n1d
+     var1d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_O',      &
+          table_entry=entry1d(m),     &
+          units=units1d(m),           &
+          axis_ids=(/ ilat, ireg, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin1d(m))
+  ENDDO
+  
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    ! Cycle through the 1-d fields (functions of lat and region), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=1,n1d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_1d_input_files(it, varin1d(m), data1d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var1d_ids(m),                        &
+             data          = data1d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table O ' &
+                // 'field ', entry1d(m), ', which I call ', varin1d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+ 
+  print*, 'Ok wrote everythin' 
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM test_region
+
diff --git a/Test/old_cmor_tables/test_shrt_exp_nm_set_att_initi.f90 b/Test/old_cmor_tables/test_shrt_exp_nm_set_att_initi.f90
new file mode 100644
index 0000000..909150e
--- /dev/null
+++ b/Test/old_cmor_tables/test_shrt_exp_nm_set_att_initi.f90
@@ -0,0 +1,343 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+    
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+    
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          field(j,i) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n2d = 1       ! number of AMIP Table 2 fields to be
+                                      !     output.
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, PARAMETER :: ntest=1
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(n2d+ntest) :: var2d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+   DOUBLE PRECISION, DIMENSION(5) :: plevs
+ DOUBLE PRECISION :: time
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+    character (len=200) :: msg,msg2
+
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='2xco2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="pcmdi-08a", &
+       forcing="co2")
+  
+  print*, 'returned from cmor_dataset'
+
+  error_flag = cmor_set_cur_dataset_attribute("initialization_method","1")
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining axes'
+  
+  axis2d_ids(1) = cmor_axis(  &
+       table='IPCC_test_table_As',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids(2) = cmor_axis(  &
+       table='IPCC_test_table_As',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis2d_ids(3) = cmor_axis(  &
+       table='IPCC_test_table_As',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining axes'
+
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,ntest
+     write(msg,*)  m-1
+     msg2 = trim(entry2d(1)(1:4)//adjustl(msg))
+     print*,'Test Code: defining variable: :',msg2
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_As',  & 
+          table_entry=msg2,     & 
+!!$          file_suffix='1979-2001',    &
+          units=units2d(1),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(1),     &
+          original_name=varin2d(1))   
+  ENDDO
+
+  print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  DO m=1,ntest
+     time_loop: DO it=1, ntimes
+        
+        ! In the following loops over the 3d and 2d fields, the user-written    
+        ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+        ! the requested AMIP table 1a and table 2 fields and store them in 
+        ! data3d and data2d, respectively.  In addition a user-written code 
+        ! (read_time) retrieves the time and time-bounds associated with the 
+        ! time sample (in units of 'days since 1970-1-1', consistent with the 
+        ! axis definitions above).  The bounds are set to the beginning and 
+        ! the end of the month retrieved, indicating the averaging period.
+        
+        ! The user must write a code to obtain the times and time-bounds for
+        !   the time slice.  The following line is simply a place-holder for
+        !   the user's code, which should replace it.
+        
+        call read_time(it, time, bnds_time)
+        
+        ! Cycle through the 3-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        
+        
+        ! Cycle through the 2-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(1), data2d)                  
+        
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+             data =          RESHAPE(data2d, (/ lat*lon /)),        &
+             ntimes_passed = 1,              &
+             time_vals =     (/ time /),           &
+             time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+        print*, 'after writing variable, ', var2d_ids(m)
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO time_loop
+     error_flag = cmor_close(var2d_ids(m))
+  END DO
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/old_cmor_tables/test_sigma.f90 b/Test/old_cmor_tables/test_sigma.f90
new file mode 100644
index 0000000..c41dc16
--- /dev/null
+++ b/Test/old_cmor_tables/test_sigma.f90
@@ -0,0 +1,551 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    CASE ('tro3')
+       factor = 1.
+       offset = 0.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             field(k,i,j) = ((SIZE(field, 1) - k)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 2.8
+       offset = 10.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 4       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'tro3 ', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', '1e-9 ',  'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=4), DIMENSION(n3d) :: entry3d = (/ 'cl  ', 'tro3', 'ua  ', 'ta  ' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim
+
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="pcmdi-08a", &
+       forcing="co2")
+  
+  !  Define all axes that will be needed
+  
+  ilat = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='IPCC_table_A1',        &
+       table_entry='standard_sigma',       &
+!!$       table_entry='standard_hybrid_sigma',       &
+       units='1',&
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 0.5e4
+!!$  p0 = 1.e5
+!!$  a_coeff = (/ 0.1, 0.2, 0.3, 0.2, 0.1 /)
+  a_coeff = (/ 0.2, 0.4, 0.6, 0.8, 0.95 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+!!$  a_coeff_bnds=(/0.,.15, .25, .25, .15, 0./)
+  a_coeff_bnds=(/0.,.3, .5, .7, .9, 1./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='ptop',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                       & 
+!!$       zfactor_name='b',                    &
+!!$       axis_ids= (/ ilev /),                &
+!!$       zfactor_values = b_coeff,            &
+!!$       zfactor_bounds = b_coeff_bnds  )
+!!$
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='sigma',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='IPCC_table_A1',      &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilev, ilon, ilat, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='IPCC_table_A1',      &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ipres, ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_table_A1',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/old_cmor_tables/test_singleton.f90 b/Test/old_cmor_tables/test_singleton.f90
new file mode 100755
index 0000000..8055f62
--- /dev/null
+++ b/Test/old_cmor_tables/test_singleton.f90
@@ -0,0 +1,594 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    REAL, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    REAL, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.2
+       offset = 10.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat,1,lon) :: scramble
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  REAL, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  REAL, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim
+  INTEGER :: iht
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, i, j
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="atm")
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  iht = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='height1',       &
+       units='m',                   &
+       length=1,                   &
+       coord_vals=(/3.0/))
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='IPCC_test_table_A',    &
+       table_entry='standard_hybrid_sigma',       &
+       length=lev,                   &
+       units='1',&
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='IPCC_test_table_A',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_A',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     IF (m==2) THEN
+
+        var2d_ids(m) = cmor_variable(    &
+             table='IPCC_test_table_A',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilat, iht, ilon, itim /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+
+     ELSE
+
+        var2d_ids(m) = cmor_variable(    &
+             table='IPCC_test_table_A',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon, ilat, itim /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+        
+     ENDIF
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+    print*, 'shape(data3d)',shape(data3d),varin3d(1)
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    print*, 'shape(data2d)',shape(data2d),varin2d(4)
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        print*, 'shape(data3d)',shape(data3d),varin3d(m)
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+
+
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+           
+           ! The user must write the code that fills the arrays of data
+           ! that will be passed to CMOR.  The following line is simply a
+           ! a place-holder for the user's code, which should replace it.
+           
+           call read_2d_input_files(it, varin2d(m), data2d)                  
+           
+           ! append a single time sample of data for a single field to 
+           ! the appropriate netCDF file.
+           
+        IF (m == 2) THEN
+
+           DO j=1,lat
+              DO i=1,lon
+                 scramble(j,1,i) = data2d(i,j)
+              END DO
+           END DO
+           
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(2),                        &
+                data          = scramble(:,1,:),                            &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+
+        ELSE
+
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = data2d,                              &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+           
+           IF (error_flag < 0) THEN
+              ! write diagnostic messages to standard output device
+              write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                   // 'field ', entry2d(m), ', which I call ', varin2d(m)
+              write(*,*) ' Was processing time sample: ', time 
+              
+           END IF
+
+        END IF
+
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/old_cmor_tables/test_sophie.f90 b/Test/old_cmor_tables/test_sophie.f90
new file mode 100644
index 0000000..867a9b1
--- /dev/null
+++ b/Test/old_cmor_tables/test_sophie.f90
@@ -0,0 +1,483 @@
+MODULE local_subs
+
+ USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+
+ SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+   IMPLICIT NONE
+
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+
+   INTEGER :: i
+
+   DO i = 1, SIZE(alons)
+      alons(i) = (i-1)*360./SIZE(alons)
+      bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+      bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+   END DO
+
+   DO i = 1, SIZE(alats)
+      alats(i) = (size(alats)+1-i)*10
+      bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+      bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+   END DO
+
+   DO i = 1, SIZE(plevs)
+      plevs(i) = i*1.0e4
+   END DO
+
+   RETURN
+ END SUBROUTINE read_coords
+
+ SUBROUTINE read_time(it, time, time_bnds)
+
+   IMPLICIT NONE
+
+   INTEGER, INTENT(IN) :: it
+   DOUBLE PRECISION, INTENT(OUT) :: time
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+
+   time = (it-0.5)*30.
+   time_bnds(1,1) = (it-1)*30.
+   time_bnds(2,1) = it*30.
+
+   RETURN
+ END SUBROUTINE read_time
+
+ SUBROUTINE read_3d_input_files(it, varname, field)
+
+   IMPLICIT NONE
+
+   INTEGER, INTENT(IN) :: it
+   CHARACTER(len=*), INTENT(IN) :: varname
+   REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+
+   INTEGER :: i, j, k
+   REAL :: factor, offset
+   CHARACTER(len=LEN(varname)) :: tmp
+
+   tmp = TRIM(ADJUSTL(varname))
+   SELECT CASE (tmp)
+   CASE ('CLOUD')  
+      factor = 0.1
+      offset = -50.
+   CASE ('U')  
+      factor = 1.
+      offset = 100.
+   CASE ('T')
+      factor = 0.5
+      offset = -150.
+   END SELECT
+   DO k=1,SIZE(field, 3)
+      DO j=1,SIZE(field, 2)
+         DO i=1,SIZE(field, 1)
+            field(i,j,k) = ((k-1)*64. + (j-1)*16. + (i-1)*4. + it)*factor - offset
+         END DO
+      END DO
+   END DO
+ END SUBROUTINE read_3d_input_files
+
+ SUBROUTINE read_2d_input_files(it, varname, field)
+
+   IMPLICIT NONE
+
+   INTEGER, INTENT(IN) :: it
+   CHARACTER(len=*), INTENT(IN) :: varname
+   REAL, INTENT(OUT), DIMENSION(:,:) :: field
+
+   INTEGER :: i, j
+   REAL :: factor, offset
+   CHARACTER(len=LEN(varname)) :: tmp
+
+   tmp = TRIM(ADJUSTL(varname))
+   SELECT CASE (tmp)
+   CASE ('LATENT')  
+
+      factor = 1.
+      offset = 20.
+   CASE ('TSURF')
+      factor = 2.0
+      offset = -220.
+   CASE ('SOIL_WET')
+      factor = 10.
+      offset = 0.
+   CASE ('PSURF')
+      factor = 100.
+      offset = -9.7e4
+   END SELECT
+
+   DO j=1,SIZE(field, 2)
+      DO i=1,SIZE(field, 1)
+         field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+      END DO
+   END DO
+
+ END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+program testing
+ use cmor_users_functions
+ use local_subs
+   implicit none
+   integer error_flag
+ INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+ INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+ INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+ INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+!  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+ INTEGER, PARAMETER :: n2d = 1       ! number of IPCC Table A1a fields to be
+                                     !     output.
+ INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                     !     be output.  
+                               ! My variable names for IPCC Table A1c fields
+ CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                               ! Units appropriate to my data
+ CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                 units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                    ! Corresponding IPCC Table A1c entry (variable name) 
+ CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                               ! My variable names for IPCC Table A1a fields
+ CHARACTER (LEN=8), DIMENSION(n2d) :: &
+!                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+                 varin2d=(/ 'LATENT  ' /)
+
+                               ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n2d) :: &
+!                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+                         units2d=(/ 'W m-2 ' /)
+
+  CHARACTER (LEN=4), DIMENSION(n2d) :: &
+!                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+                     positive2d= (/  'down'  /)
+
+                    ! Corresponding IPCC Table A1a entry (variable name) 
+ CHARACTER (LEN=5), DIMENSION(n2d) :: &
+!                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+                       entry2d = (/ 'hfls ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+ INTEGER :: znondim_id, zfactor_id
+ INTEGER, DIMENSION(n2d) :: var2d_ids
+ INTEGER, DIMENSION(n3d) :: var3d_ids
+ REAL, DIMENSION(lon,lat) :: data2d
+ real, DIMENSION(lon*lat) ::  data1dtest
+ REAL, DIMENSION(lon,lat,lev) :: data3d
+ DOUBLE PRECISION, DIMENSION(lat) :: alats
+ DOUBLE PRECISION, DIMENSION(lon) :: alons
+ DOUBLE PRECISION, DIMENSION(lev) :: plevs
+ DOUBLE PRECISION, DIMENSION(1) :: time
+ DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+ DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+ DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+ DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+ DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+ real, DIMENSION(lev) :: a_coeff
+ DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+ DOUBLE PRECISION :: p0
+ DOUBLE PRECISION :: p0array(1)
+ real, DIMENSION(lev+1) :: a_coeff_bnds
+ DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+ INTEGER :: ilon, ilat, ipres, ilev, itim,i
+ real :: missing
+
+ !  Other variables:
+ !  ---------------------
+
+ INTEGER :: it, m, j,k
+
+! format classic(NETCDF-3)
+!  j = CMOR_REPLACE_3
+! format NETCDF-4
+ j = CMOR_REPLACE
+ k = CMOR_EXIT_ON_MAJOR
+ error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+      exit_control=k)
+ print*,'Test code: done'
+ error_flag = cmor_dataset(                                   &
+      outpath='Test',                                         &
+      experiment_id='2xCO2 equilibrium experiment',           &
+      institution=                                            &
+      'GICC (Generic International Climate Center, ' //       &
+      'Geneva, Switzerland)',                                 &
+      source='GICCM1 (2002): ' //                             &
+      'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+      'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+      'sea ice: GISIM4; land: GILSM2.5',                      &
+      calendar='360_day',                                      &
+      realization=1,                                          &
+      contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+      history='Output from archive/giccm_03_std_2xCO2_2256.', &
+      comment='Equilibrium reached after 30-year spin-up ' // &
+      'after which data were output starting with nominal '// &
+      'date of January 2030',                                 &
+      references='Model described by Koder and Tolkien ' //   &
+      '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+      'see http://www.GICC.su/giccm/doc/index.html '     //   &
+      ' 2XCO2 simulation described in Dorkey et al. '    //   &
+      '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+      forcing="CO2")
+ print*, 'Test code: done 2 lalala'
+
+ call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+
+ print*, 'Test code: ok calling axis stuff lat',alats
+ ilat = cmor_axis(  &
+      table='Sophie_Table',    &
+      table_entry='latitude',       &
+      units='degrees_north',        &  
+      length=lat,                   &
+      coord_vals=alats,             & 
+      cell_bounds=bnds_lat)        
+
+ print*, 'Test code: ok calling axis stuff lon',ilat
+ ilon = cmor_axis(  &
+      table='Sophie_Table',    &
+      table_entry='longitude',      &
+      length=lon,                   &
+      units='degrees_east',         &
+      coord_vals=alons,             &
+      cell_bounds=bnds_lon)      
+
+ print*, 'Test code: ok calling axis stuff pressure',ilon
+ ipres = cmor_axis(  &
+      table='Sophie_Table',    &
+      table_entry='pressure',       &
+      units='Pa',                   &
+      length=lev,                   &
+      coord_vals=plevs)
+
+ !   note that the time axis is defined next, but the time coordinate 
+ !   values and bounds will be passed to cmor through function 
+ !   cmor_write (later, below).
+
+ print*, 'Test code: ok calling axis stuff time',ipres,ntimes
+ itim = cmor_axis(  &
+      table='Sophie_Table',    &
+      table_entry='time',           &
+      units='days since 2030-1-1',  &
+      length=ntimes,                &
+      interval='30 days')
+
+ !  define model eta levels (although these must be provided, they will
+ !    actually be replaced by a+b before writing the netCDF file)
+ zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+ zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+ print*, 'Test code: ok calling axis stuff lev2',itim
+ ilev = cmor_axis(  &
+      table='Sophie_Table',    &
+      table_entry='standard_hybrid_sigma',       &
+      units="1",   &
+      length=lev,                   &
+      coord_vals=zlevs,             &
+      cell_bounds=zlev_bnds)
+
+ print*, 'Test code: ok called stuff lev2',ilev
+ !   define z-factors needed to transform from model level to pressure
+ p0 = 1.e5
+ p0array(1)=p0
+ a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+ b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+ a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+ b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+ print*, 'Test code: zfactor p0'
+ error_flag = cmor_zfactor(  &
+      zaxis_id=ilev,                      &
+      zfactor_name='p0',                  &
+      units='Pa',                         &
+      zfactor_values = p0)
+
+ print*, 'Test code: result',error_flag
+ print*, 'Test code: zfactor b'
+ error_flag = cmor_zfactor(  &
+      zaxis_id=ilev,                       & 
+      zfactor_name='b',                    &
+      axis_ids= (/ ilev /),                &
+      zfactor_values = b_coeff,            &
+      zfactor_bounds = b_coeff_bnds  )
+
+ print*, 'Test code: result',error_flag
+ print*, 'Test code: zfactor a'
+ error_flag = cmor_zfactor(  &
+      zaxis_id=ilev,                       &
+      zfactor_name='a',                    &
+      axis_ids= (/ ilev /),                &
+      zfactor_values = a_coeff,            &
+      zfactor_bounds = a_coeff_bnds )
+
+ print*, 'Test code: result',error_flag
+ print*, 'Test code: zfactor ps'
+ zfactor_id = cmor_zfactor(  &
+      zaxis_id=ilev,                         &
+      zfactor_name='ps',                     &
+      axis_ids=(/ ilon, ilat, itim /),       &
+      units='Pa' )
+
+ print*, 'Test code: result',zfactor_id
+ print*, 'Test code: var3d'
+ missing = 1.e28
+ var3d_ids(1) = cmor_variable(    &
+      table='Sophie_Table',  &
+      table_entry=entry3d(1),     &
+      units=units3d(1),           &
+      axis_ids=(/ ilon, ilat, ilev, itim /),  &
+      missing_value=missing, &
+      original_name=varin3d(1))
+
+ !  Define variables appearing in IPCC table A1c that are a function of pressure
+ !         (3-d variables)
+
+ print*, 'Test code: result',var3d_ids(1)
+ DO m=2,n3d
+    print*, 'Test code: var: ',entry3d(m)
+    var3d_ids(m) = cmor_variable(    &
+         table='Sophie_Table',  &
+         table_entry=entry3d(m),     &
+         units=units3d(m),           &
+         axis_ids=(/ ilon, ilat, ipres, itim /), &
+         missing_value=missing,       &
+         original_name=varin3d(m))
+    print*, 'Test code: result',var3d_ids(m)
+ ENDDO
+
+
+ !  Define variables appearing in IPCC table A1a (2-d variables)
+
+ DO m=1,n2d
+    print*, 'Test code: var: ',entry2d(m)
+    var2d_ids(m) = cmor_variable(    &
+         table='Sophie_Table',  &
+         table_entry=entry2d(m),     & 
+         units=units2d(m),           & 
+    !     axis_ids=(/ ilon, ilat, itim /), &
+         axis_ids=(/ ilon, ilat /), &
+         missing_value=missing,       &
+         positive=positive2d(m),     &
+         original_name=varin2d(m))   
+    print*, 'Test code: result',var2d_ids(m)
+ ENDDO
+
+ PRINT*, 'Test code:  '
+ PRINT*, 'Test code: completed everything up to writing output fields '
+ PRINT*, 'Test code:  '
+ time_loop: DO it=1, ntimes
+
+    ! In the following loops over the 3d and 2d fields, the user-written    
+    ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+    ! the requested IPCC table A1c and table A1a fields and store them in 
+    ! data3d and data2d, respectively.  In addition a user-written code 
+    ! (read_time) retrieves the time and time-bounds associated with the 
+    ! time sample (in units of 'days since 1970-1-1', consistent with the 
+    ! axis definitions above).  The bounds are set to the beginning and 
+    ! the end of the month retrieved, indicating the averaging period.
+
+    ! The user must write a code to obtain the times and time-bounds for
+    !   the time slice.  The following line is simply a place-holder for
+    !   the user's code, which should replace it.
+   call read_time(it, time(1), bnds_time)
+   call read_3d_input_files(it, varin3d(1), data3d)
+
+   error_flag = cmor_write(                                  &
+        var_id        = var3d_ids(1),                        &
+        data          = data3d,                              &
+        ntimes_passed = 1,                                   &
+        time_vals     = time,                                &
+        time_bnds     = bnds_time   )
+
+   call read_2d_input_files(it, 'PSURF', data2d)                  
+
+   error_flag = cmor_write(                                  &
+        var_id        = zfactor_id,                          &
+        data          = data2d,                              &
+        ntimes_passed = 1,                                   &
+        time_vals     = time,                                &
+        time_bnds     = bnds_time,                           &
+        store_with    = var3d_ids(1) )
+   
+   print*, 'Test code: result',error_flag
+  ! Cycle through the 3-d fields (stored on pressure levels), 
+   ! and retrieve the requested variable and append each to the 
+   ! appropriate netCDF file.
+
+   DO m=2,n3d
+
+       ! The user must write the code that fills the arrays of data
+       ! that will be passed to CMOR.  The following line is simply a
+       ! a place-holder for the user's code, which should replace it.
+
+       call read_3d_input_files(it, varin3d(m), data3d)
+
+       ! append a single time sample of data for a single field to 
+       ! the appropriate netCDF file.
+       print*, ' Writing 3D variable:',var3d_ids(m)
+       error_flag = cmor_write(                                  &
+            var_id        = var3d_ids(m),                        &
+            data          = data3d,                              &
+            ntimes_passed = 1,                                   &
+            time_vals     = time,                                &
+            time_bnds     = bnds_time  )
+
+       IF (error_flag < 0) THEN
+          ! write diagnostic messages to standard output device
+          write(*,*) 'Test code:  Error encountered writing IPCC Table A1c ' &
+               // 'field ', entry3d(m), ', which I call ', varin3d(m)
+          write(*,*) 'Test code:  Was processing time sample: ', time
+
+       END IF
+
+    END DO
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+    DO m=1,n2d
+
+       ! The user must write the code that fills the arrays of data
+       ! that will be passed to CMOR.  The following line is simply a
+       ! a place-holder for the user's code, which should replace it.
+
+       call read_2d_input_files(it, varin2d(m), data2d)                  
+
+       ! append a single time sample of data for a single field to 
+       ! the appropriate netCDF file.
+       print*, 'Writing var 2d:',var2d_ids(m)
+       error_flag = cmor_write(                                  &
+            var_id        = var2d_ids(m),                        &
+            data          = data2d,                              &
+            ntimes_passed = 0 )
+            !ntimes_passed = 1,                                   &
+            !time_vals     = time,                                &
+            !time_bnds     = bnds_time  )
+
+      IF (error_flag < 0) THEN
+          ! write diagnostic messages to standard output device
+          write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+               // 'field ', entry2d(m), ', which I call ', varin2d(m)
+          write(*,*) 'Test code:  Was processing time sample: ', time 
+
+       END IF
+
+    END DO
+
+ END DO time_loop
+
+ error_flag = cmor_close()
+
+end program testing
diff --git a/Test/old_cmor_tables/test_station_data.f90 b/Test/old_cmor_tables/test_station_data.f90
new file mode 100644
index 0000000..47b1c7a
--- /dev/null
+++ b/Test/old_cmor_tables/test_station_data.f90
@@ -0,0 +1,380 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    INTEGER, INTENT(OUT), DIMENSION(:) ::  station
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lons
+    
+    INTEGER :: i, j, k
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    k = 1
+    DO i = 1, SIZE(alons)
+      DO j = 1, SIZE(alats)
+        station(k) = k
+        st_lons(k) = alons(i)
+        st_lats(k) = alats(j)
+        k = k+1
+      END DO   
+    END DO 
+    
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  !------------------------------------------------
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  !------------------------------------------------
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+!=======================================================
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: nst = 12      ! number of stations
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+  INTEGER igrid;
+                          
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  REAL, DIMENSION(lon*lat,lev) :: data2d_st
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  INTEGER, DIMENSION(lon*lat) :: station
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lons
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lats
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, i, ist
+  real :: missing
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k
+
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  print*,'Test code: done'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="pcmdi-08a", &
+       forcing="CO2")
+  print*, 'Test code: done 2 lalala'
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+  
+
+  print*, 'Test code: ok calling axis stuff station'
+  ist = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='station',       &
+       units=' ',        &  
+       length=nst,                   &
+       coord_vals=station )      
+       
+   
+  print*, 'Test code: ok calling axis stuff pressure',ist
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  print*, 'Test code: ok calling axis stuff time',ipres
+  itim = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+
+  
+  ! to make it a station data, we need to define the grid with lon/lat 
+  ! information. CMOR will then add the 'longitude' and 'latitude'
+  ! variables as assosiated to the station data.
+  ! You do not set up lon/lat as axis variables for the station data     
+  ! note - the first parameter has ot be an array (of dim=1 in this example)
+  igrid = cmor_grid((/ist/), st_lats, st_lons)       
+       
+  write(*,'(a, 12f6.1)') 'lons: ',st_lons
+  write(*,'(a, 12f6.1)') 'lats: ',st_lats
+  
+  !===============================================================
+  print*, ' '
+   
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  DO m=1,4
+     print*, 'Test code: var:  ',entry2d(m)
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_S',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ igrid, itim /), &
+          missing_value=missing,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+     print*, 'Test code: result',var2d_ids(m)
+  ENDDO   
+  
+
+  PRINT*, 'Test code:  '
+  PRINT*, 'Test code: completed everything up to writing output fields '
+  PRINT*, 'Test code:  '
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)    
+        k = 1  
+        DO j = 1, lat
+          data1dtest(k:k+lat) = data2d(:,j) 
+          k = k+lat+1 
+        END DO   
+        !write(*,'(a, 12(f8.1,1x))'), entry2d(m), data1dtest            
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data1dtest,                          &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO 
+     
+     
+  END DO time_loop
+
+  error_flag = cmor_close()
+
+end program testing
diff --git a/Test/old_cmor_tables/wegner_test.f90 b/Test/old_cmor_tables/wegner_test.f90
new file mode 100644
index 0000000..70cfd83
--- /dev/null
+++ b/Test/old_cmor_tables/wegner_test.f90
@@ -0,0 +1,447 @@
+module my_subs
+
+contains
+
+subroutine levrein(mlev, alev, blev, zlev, alevb, blevb, zlevb, p0)
+
+integer                             :: mlev
+double precision, intent(INOUT),dimension(mlev)   :: zlev
+double precision, intent(INOUT),dimension(mlev+1) :: zlevb
+real,             dimension(mlev)   :: slev
+real,             intent(INOUT),dimension(mlev)   :: alev, blev
+real,             intent(INOUT),dimension(mlev+1) :: alevb, blevb
+real , intent(inout) :: p0
+p0=101325.0
+
+slev=(/ &
+    0.00000000000000000,&
+ 2000.00000000000000000,&
+ 4000.00000000000000000,&
+ 6000.00000000000000000,&
+ 8000.00000000000000000,&
+ 9976.13671875000000000,&
+11820.53906250000000000,&
+13431.39453125000000000,&
+14736.35546875000000000,&
+15689.20703125000000000,&
+16266.60937500000000000,&
+16465.00390625000000000,&
+16297.62109375000000000,&
+15791.59765625000000000,&
+14985.26953125000000000,&
+13925.51953125000000000,&
+12665.29296875000000000,&
+11261.23046875000000000,&
+ 9771.40625000000000000,&
+ 8253.21093750000000000,&
+ 6761.33984375000000000,&
+ 5345.91406250000000000,&
+ 4050.71777343750000000,&
+ 2911.56933593750000000,&
+ 1954.80517578125000000,&
+ 1195.88989257812500000,&
+  638.14892578125000000,&
+  271.62646484375000000,&
+   72.06358337402343750,&
+    0.00000000000000000,&
+    0.00000000000000000,&
+    0.00000000000000000 /)
+
+do i=1,mlev
+  alev(i)=slev(i)/p0
+end do
+blev=(/ &
+0.00000000000000000,&
+0.00000000000000000,&
+0.00000000000000000,&
+0.00000000000000000,&
+0.00000000000000000,&
+0.00039085815660655,&
+0.00291970069520175,&
+0.00919413194060326,&
+0.02031915634870529,&
+0.03697485849261284,&
+0.05948764085769653,&
+0.08789497613906860,&
+0.12200361490249634,&
+0.16144150495529175,&
+0.20570325851440430,&
+0.25418859720230103,&
+0.30623537302017212,&
+0.36114501953125000,&
+0.41820228099822998,&
+0.47668814659118652,&
+0.53588658571243286,&
+0.59508424997329712,&
+0.65356457233428955,&
+0.71059441566467285,&
+0.76540523767471313,&
+0.81716698408126831,&
+0.86495584249496460,&
+0.90771585702896118,&
+0.94421321153640747,&
+0.97298520803451538,&
+0.99228149652481079,&
+1.00000000000000000 /)
+
+do i=1,mlev
+   zlev(i)=alev(i)+blev(i)
+end do
+do i=2,mlev
+   alevb(i)=abs((alev(i)+alev(i-1))/2)
+end do
+alevb(1)=0.
+alevb(mlev+1)=0.
+
+do i=2,mlev
+   blevb(i)=abs((blev(i)+blev(i-1))/2)
+end do
+blevb(1)=0.
+blevb(mlev+1)=1.0
+
+do i=2,mlev
+   zlevb(i)=abs((zlev(i)+zlev(i-1))/2)
+end do
+zlevb(1)=0.
+zlevb(mlev+1)=1.0
+print*, 'done levrein going out' 
+end subroutine levrein
+
+subroutine latrein(lat, lon, latd, lond, bndslat, bndslon)
+
+double precision, dimension(lon)   :: lond
+double precision, dimension(lat)   :: latd
+double precision, dimension(2,lon) :: bndslon
+double precision, dimension(2,lat) :: bndslat
+double precision, dimension(17)    :: plevs
+
+integer   :: i
+
+lond(1)=0.0
+bndslon(1,1)=-0.9375
+bndslon(2,1)=0.9375
+do i=1,191
+   lond(i+1)     =lond(i)+1.875000
+   bndslon(1,i+1)=lond(i+1)-0.9375
+   bndslon(2,i+1)=lond(i+1)+0.9375
+end do
+
+latd=(/ &
+ -88.572,-86.723,-84.862,-82.999,-81.135,-79.271,-77.406,-75.541,-73.676,-71.811, &
+ -69.946,-68.081,-66.216,-64.351,-62.486,-60.620,-58.755,-56.890,-55.025,-53.160, &
+ -51.294,-49.429,-47.564,-45.699,-43.833,-41.968,-40.103,-38.238,-36.372,-34.507, &
+ -32.642,-30.777,-28.911,-27.046,-25.181,-23.316,-21.450,-19.585,-17.720,-15.855, &
+ -13.989,-12.124,-10.259,-8.394,-6.528,-4.663,-2.798,-0.933, 0.933, 2.798, &
+ 4.663, 6.528, 8.394, 10.259, 12.124, 13.989, 15.855, 17.720, 19.585, 21.450, &
+ 23.316,25.181,27.046,28.911,30.777,32.642,34.507,36.372,38.238,40.103, &
+ 41.968,43.833,45.699,47.564,49.429,51.294,53.160,55.025,56.890,58.755, &
+ 60.620,62.486,64.351,66.216,68.081,69.946,71.811,73.676,75.541,77.406, &
+ 79.271,81.135,82.999,84.862,86.723,88.572 /)
+
+do i=1,95
+   bndslat(2,i)=latd(i)-((latd(i)-(latd(i+1)))/2.)
+   bndslat(1,i+1)=bndslat(2,i)
+end do
+bndslat(1,1)=-90.0
+bndslat(2,96)=90.0
+
+end subroutine latrein
+
+
+subroutine timdatrein(nrec, lev, lat, lon, time, bndstime, data2, data3)
+
+double precision, dimension(nrec) :: time
+double precision, dimension(2,nrec) :: bndstime
+
+real, dimension(lon*lat)         :: dummy2, dummy3
+real, dimension(lon,lat,nrec)    :: data2
+real, dimension(lon,lat,lev,nrec):: data3
+integer                          :: jtime, icode, ilevel, nsize
+integer                          :: i, nyear, ihalf, nrec
+integer                          :: iyear, imon, iday, im, id, itime
+integer                          :: jd1860, jdactu
+character (len=50)               :: filearg
+
+! filenamen als argument fuer program einlesen:
+! filearg 1 ist 2d feld
+! filearg 2 ist 3d feld
+!
+call getarg(1, filearg)
+open(1,file=filearg, form='unformatted')
+call getarg(2, filearg)
+open(2,file=filearg, form='unformatted')
+
+! Zeit seit 1860 01 01 12
+! Julian date 1859 12 31 12
+!
+jd1860 = 31-32075+1461*(1859+4800+(12-14)/12)/4+367*(12-2-(12-14)/12*12) &
+         /12-3*((1859+4900+(12-14)/12)/100)/4
+
+do i=1,nrec
+   read(1) jtime, icode, ilevel,nsize
+   read(1) dummy2
+
+   iyear = int(jtime/10000)
+   im = iyear*100
+   imon = int(jtime/100)-im
+   id = imon*100
+
+   monlen: select case (imon)
+   case(4,6,9,11)
+      iday = 30
+   case(2)
+      if(mod(iyear,4).eq.0) then
+       if (mod(iyear,100).eq.0) then
+          iday = 28
+       else
+          iday = 29
+       endif
+       if(mod(iyear,400).eq.0) iday=29
+      else
+          iday = 28
+      endif
+   case default
+     iday = 31
+   end select monlen
+   ihalf=15
+   print*, itime, iyear, imon, iday
+      jdactu = ihalf-32075+1461*(iyear+4800+(imon-14)/12)/4+367*(imon-2-(imon-14)/12*12) &
+               /12-3*((iyear+4900+(imon-14)/12)/100)/4
+      time(i) = jdactu - jd1860
+      bndstime(1,i) = time(i) - ihalf
+      bndstime(2,i) = time(i) + (iday-ihalf)
+   print*, bndstime(1,i), time(i), bndstime(2,i)
+
+   do j=1,lat
+     do k=1,lon
+       data2(k,j,i)= dummy2(lon*(j-1) + k)
+     end do
+   end do
+  
+   do l=1,lev
+      read(2) jtime, icode, ilevel, nsize
+      read(2) dummy3
+      do j=1,lat
+        do k=1,lon
+          data3(k,j,l,i)= dummy3(lon*(j-1) + k)
+        end do
+      end do
+   end do
+
+end do
+   print*, time
+
+end subroutine timdatrein
+
+end module my_subs
+
+program wegner
+  !
+  use cmor_users_functions
+
+  use my_subs
+
+  implicit none
+
+  !   dimension parameters:
+  ! ---------------------------------
+
+  INTEGER, PARAMETER                 :: nti = 24  
+  INTEGER, PARAMETER                 :: lon = 192       
+  INTEGER, PARAMETER                 :: lat = 96     
+  INTEGER, PARAMETER                 :: lev = 32    
+
+  ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=50)                 :: TABLE = 'Test/IPCC_table_A1'
+  CHARACTER (LEN=50)                 :: OUTDIR = 'Test'
+  CHARACTER (LEN=50)                 :: TABELLE = 'Test/IPCC_table_A1'
+  CHARACTER (LEN=5)                  :: varin2d = 'MSLP '
+  CHARACTER (LEN=5)                  :: units2d = 'Pa   '
+  CHARACTER (LEN=5)                  :: posit2d = '     '
+  CHARACTER (LEN=5)                  :: entry2d = 'ps   '
+  CHARACTER (LEN=5)                  :: varin3d = 'CLOUD'
+  CHARACTER (LEN=5)                  :: units3d = '%    '
+  CHARACTER (LEN=5)                  :: entry3d = 'cl   '
+
+  
+  !  uninitialized variables used in communicating with CMOR:
+  !  ---------------------------------------------------------
+
+  INTEGER                            :: error_flag, j,k
+  INTEGER                            :: znondim_id, zfactor_id=1
+  INTEGER                            :: var2d_ids
+  INTEGER                            :: var3d_ids
+  REAL, DIMENSION(lon,lat,nti)       :: data2d
+  REAL, DIMENSION(lon,lat,lev,nti)   :: data3d
+  REAL, DIMENSION(lon,lat)           :: data2d2
+  DOUBLE PRECISION, DIMENSION(lat)   :: alats
+  DOUBLE PRECISION, DIMENSION(lon)   :: alons
+  DOUBLE PRECISION, DIMENSION(nti)   :: time
+  DOUBLE PRECISION, DIMENSION(2,nti) :: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev)   :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev)               :: a_coeff, b_coeff
+  REAL, DIMENSION(lev+1)             :: a_coeff_bnds, b_coeff_bnds
+  REAL                               :: p0
+  INTEGER                            :: ilon, ilat, ipres, ilev, itim
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER                            :: it
+  
+  ! read the grid
+  ! --------------------
+  
+  call latrein(lat, lon, alats, alons, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='TABLE',                      &
+               netcdf_file_action='replace',                   &
+               exit_control=1)
+  
+  ! Define dataset as output from  ECHAM5-OM1
+  ! -----------------------------------------
+  error_flag         = cmor_dataset(                           &
+       outpath       = OUTDIR,                                 &
+       experiment_id ='pre-industrial control experiment',     &
+       institution   ='MPI (Max Planck Institute for Meteorology,'  // &
+       'Hamburg, Germany)',                                    &
+       source        ='ECHAM5/MPI-OM(2004):'//                 &
+       'atmosphere:  ECHAM5 (T63L32);'//                       &
+       'ocean:       OM (1x1L41); '//                          &
+       'sea ice:     ECHAM5',                                  &
+       calendar      ='gregorian',                             &
+       realization   =1,                                       &
+       contact = 'Joerg Wegner (wegner at dkrz.de) ',             &
+       history='Output from CERA Database/EH5_OM_20C_1_TEMP2', &
+       comment='anthropogenic forcing only',                   &
+       references='ECHAM5: E. Roeckner et. all, 2003,' //      &
+       'The atmospheric general circulation model ECHAM5' //   & 
+       'Report No. 349' //                                     &
+       'OM: Marsland et. all, 2003,' //                        &
+       'The Max-Planck-Institute global ocean/sea ice model'// &
+       'with orthogonal curvelinear coordinates' //            &
+       'Ocean Modell., 5, 91-127.' )
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='time',           &
+       units='days since 1860-1-1',  &
+       length=nti,                   &
+       interval='12 minutes')
+ 
+  call levrein(lev, a_coeff, b_coeff, zlevs, a_coeff_bnds, b_coeff_bnds, zlev_bnds, p0)
+  print*, 'done levrein'
+  print*, 'sure ?'
+  ilev = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='standard_hybrid_sigma',&
+       length=lev,                   &
+       units = '1',&
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  error_flag = cmor_zfactor(               &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(               &
+       zaxis_id=ilev,                      & 
+       zfactor_name='b',                   &
+       axis_ids= (/ ilev /),               &
+       zfactor_values = b_coeff,           &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(               &
+       zaxis_id=ilev,                      &
+       zfactor_name='a',                   &
+       axis_ids= (/ ilev /),               &
+       zfactor_values = a_coeff,           &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(               &
+       zaxis_id=ilev,                      &
+       zfactor_name='ps',                  &
+       axis_ids=(/ ilon, ilat, itim /),    &
+       units='Pa' )
+
+  
+     var2d_ids = cmor_variable(            &
+          table=TABELLE,                   &
+          table_entry=entry2d,             & 
+          units=units2d,                   & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e20,            &
+          positive=posit2d,                &
+          original_name=varin2d)   
+
+     var3d_ids = cmor_variable(            &
+          table=TABELLE,                   &
+          table_entry=entry3d,             &
+          units=units3d,                   &
+          axis_ids=(/ ilon, ilat, ilev, itim /),  &
+          missing_value=1.0e20,            &
+          original_name=varin3d)
+
+  print*, ' '
+  print*, 'completed everything up to writing output fields '
+  print*, ' '
+  
+  call timdatrein(nti, lev, lat, lon, time, bnds_time, data2d, data3d)
+
+        
+     error_flag = cmor_write(                               &
+           var_id        = var3d_ids,                       &
+           data          = data3d,                          &
+           ntimes_passed = nti,                             &
+           time_vals     = time,                            &
+           time_bnds     = bnds_time )
+
+     error_flag = cmor_write(                               &
+           var_id        = var2d_ids,                       &
+           data          = data2d,                          &
+           ntimes_passed = nti,                             &
+           time_vals     = time,                            &
+           time_bnds     = bnds_time,                       &
+           store_with    = var3d_ids )
+
+  if (error_flag < 0) then
+ ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+               // 'field ', entry2d, ', which I call ', varin2d
+           write(*,*) ' Was processing time sample: ', time 
+  end if
+  !   Close all files opened by CMOR.
+  !   -------------------------------
+  error_flag = cmor_close()  
+ 
+end program wegner
diff --git a/Test/out_files.py b/Test/out_files.py
new file mode 100644
index 0000000..a448bfb
--- /dev/null
+++ b/Test/out_files.py
@@ -0,0 +1,493 @@
+lots = """
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls0/r1i4p6/hfls0_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls1/r1i4p6/hfls1_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls10/r1i4p6/hfls10_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls100/r1i4p6/hfls100_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls101/r1i4p6/hfls101_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls102/r1i4p6/hfls102_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls103/r1i4p6/hfls103_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls104/r1i4p6/hfls104_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls105/r1i4p6/hfls105_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls106/r1i4p6/hfls106_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls107/r1i4p6/hfls107_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls108/r1i4p6/hfls108_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls109/r1i4p6/hfls109_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls11/r1i4p6/hfls11_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls110/r1i4p6/hfls110_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls111/r1i4p6/hfls111_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls112/r1i4p6/hfls112_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls113/r1i4p6/hfls113_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls114/r1i4p6/hfls114_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls115/r1i4p6/hfls115_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls116/r1i4p6/hfls116_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls117/r1i4p6/hfls117_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls118/r1i4p6/hfls118_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls119/r1i4p6/hfls119_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls12/r1i4p6/hfls12_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls120/r1i4p6/hfls120_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls121/r1i4p6/hfls121_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls122/r1i4p6/hfls122_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls123/r1i4p6/hfls123_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls124/r1i4p6/hfls124_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls125/r1i4p6/hfls125_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls126/r1i4p6/hfls126_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls127/r1i4p6/hfls127_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls128/r1i4p6/hfls128_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls129/r1i4p6/hfls129_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls13/r1i4p6/hfls13_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls130/r1i4p6/hfls130_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls131/r1i4p6/hfls131_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls132/r1i4p6/hfls132_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls133/r1i4p6/hfls133_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls134/r1i4p6/hfls134_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls135/r1i4p6/hfls135_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls136/r1i4p6/hfls136_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls137/r1i4p6/hfls137_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls138/r1i4p6/hfls138_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls139/r1i4p6/hfls139_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls14/r1i4p6/hfls14_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls140/r1i4p6/hfls140_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls141/r1i4p6/hfls141_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls142/r1i4p6/hfls142_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls143/r1i4p6/hfls143_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls144/r1i4p6/hfls144_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls145/r1i4p6/hfls145_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls146/r1i4p6/hfls146_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls147/r1i4p6/hfls147_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls148/r1i4p6/hfls148_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls149/r1i4p6/hfls149_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls15/r1i4p6/hfls15_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls150/r1i4p6/hfls150_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls151/r1i4p6/hfls151_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls152/r1i4p6/hfls152_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls153/r1i4p6/hfls153_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls154/r1i4p6/hfls154_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls155/r1i4p6/hfls155_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls156/r1i4p6/hfls156_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls157/r1i4p6/hfls157_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls158/r1i4p6/hfls158_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls159/r1i4p6/hfls159_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls16/r1i4p6/hfls16_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls160/r1i4p6/hfls160_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls161/r1i4p6/hfls161_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls162/r1i4p6/hfls162_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls163/r1i4p6/hfls163_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls164/r1i4p6/hfls164_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls165/r1i4p6/hfls165_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls166/r1i4p6/hfls166_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls167/r1i4p6/hfls167_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls168/r1i4p6/hfls168_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls169/r1i4p6/hfls169_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls17/r1i4p6/hfls17_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls170/r1i4p6/hfls170_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls171/r1i4p6/hfls171_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls172/r1i4p6/hfls172_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls173/r1i4p6/hfls173_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls174/r1i4p6/hfls174_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls175/r1i4p6/hfls175_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls176/r1i4p6/hfls176_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls177/r1i4p6/hfls177_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls178/r1i4p6/hfls178_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls179/r1i4p6/hfls179_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls18/r1i4p6/hfls18_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls180/r1i4p6/hfls180_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls181/r1i4p6/hfls181_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls182/r1i4p6/hfls182_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls183/r1i4p6/hfls183_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls184/r1i4p6/hfls184_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls185/r1i4p6/hfls185_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls186/r1i4p6/hfls186_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls187/r1i4p6/hfls187_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls188/r1i4p6/hfls188_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls189/r1i4p6/hfls189_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls19/r1i4p6/hfls19_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls190/r1i4p6/hfls190_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls191/r1i4p6/hfls191_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls192/r1i4p6/hfls192_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls193/r1i4p6/hfls193_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls194/r1i4p6/hfls194_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls195/r1i4p6/hfls195_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls196/r1i4p6/hfls196_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls197/r1i4p6/hfls197_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls198/r1i4p6/hfls198_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls199/r1i4p6/hfls199_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls2/r1i4p6/hfls2_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls20/r1i4p6/hfls20_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls200/r1i4p6/hfls200_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls201/r1i4p6/hfls201_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls202/r1i4p6/hfls202_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls203/r1i4p6/hfls203_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls204/r1i4p6/hfls204_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls205/r1i4p6/hfls205_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls206/r1i4p6/hfls206_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls207/r1i4p6/hfls207_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls208/r1i4p6/hfls208_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls209/r1i4p6/hfls209_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls21/r1i4p6/hfls21_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls210/r1i4p6/hfls210_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls211/r1i4p6/hfls211_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls212/r1i4p6/hfls212_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls213/r1i4p6/hfls213_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls214/r1i4p6/hfls214_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls215/r1i4p6/hfls215_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls216/r1i4p6/hfls216_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls217/r1i4p6/hfls217_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls218/r1i4p6/hfls218_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls219/r1i4p6/hfls219_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls22/r1i4p6/hfls22_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls220/r1i4p6/hfls220_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls221/r1i4p6/hfls221_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls222/r1i4p6/hfls222_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls223/r1i4p6/hfls223_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls224/r1i4p6/hfls224_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls225/r1i4p6/hfls225_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls226/r1i4p6/hfls226_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls227/r1i4p6/hfls227_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls228/r1i4p6/hfls228_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls229/r1i4p6/hfls229_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls23/r1i4p6/hfls23_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls230/r1i4p6/hfls230_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls231/r1i4p6/hfls231_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls232/r1i4p6/hfls232_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls233/r1i4p6/hfls233_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls234/r1i4p6/hfls234_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls235/r1i4p6/hfls235_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls236/r1i4p6/hfls236_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls237/r1i4p6/hfls237_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls238/r1i4p6/hfls238_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls239/r1i4p6/hfls239_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls24/r1i4p6/hfls24_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls240/r1i4p6/hfls240_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls241/r1i4p6/hfls241_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls242/r1i4p6/hfls242_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls243/r1i4p6/hfls243_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls244/r1i4p6/hfls244_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls245/r1i4p6/hfls245_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls246/r1i4p6/hfls246_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls247/r1i4p6/hfls247_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls248/r1i4p6/hfls248_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls249/r1i4p6/hfls249_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls25/r1i4p6/hfls25_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls250/r1i4p6/hfls250_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls251/r1i4p6/hfls251_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls252/r1i4p6/hfls252_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls253/r1i4p6/hfls253_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls254/r1i4p6/hfls254_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls255/r1i4p6/hfls255_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls256/r1i4p6/hfls256_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls257/r1i4p6/hfls257_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls258/r1i4p6/hfls258_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls259/r1i4p6/hfls259_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls26/r1i4p6/hfls26_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls260/r1i4p6/hfls260_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls261/r1i4p6/hfls261_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls262/r1i4p6/hfls262_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls263/r1i4p6/hfls263_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls264/r1i4p6/hfls264_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls265/r1i4p6/hfls265_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls266/r1i4p6/hfls266_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls267/r1i4p6/hfls267_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls268/r1i4p6/hfls268_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls269/r1i4p6/hfls269_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls27/r1i4p6/hfls27_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls270/r1i4p6/hfls270_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls271/r1i4p6/hfls271_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls272/r1i4p6/hfls272_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls273/r1i4p6/hfls273_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls274/r1i4p6/hfls274_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls275/r1i4p6/hfls275_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls276/r1i4p6/hfls276_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls277/r1i4p6/hfls277_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls278/r1i4p6/hfls278_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls279/r1i4p6/hfls279_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls28/r1i4p6/hfls28_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls280/r1i4p6/hfls280_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls281/r1i4p6/hfls281_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls282/r1i4p6/hfls282_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls283/r1i4p6/hfls283_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls284/r1i4p6/hfls284_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls285/r1i4p6/hfls285_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls286/r1i4p6/hfls286_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls287/r1i4p6/hfls287_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls288/r1i4p6/hfls288_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls289/r1i4p6/hfls289_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls29/r1i4p6/hfls29_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls290/r1i4p6/hfls290_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls291/r1i4p6/hfls291_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls292/r1i4p6/hfls292_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls293/r1i4p6/hfls293_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls294/r1i4p6/hfls294_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls295/r1i4p6/hfls295_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls296/r1i4p6/hfls296_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls297/r1i4p6/hfls297_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls298/r1i4p6/hfls298_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls299/r1i4p6/hfls299_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls3/r1i4p6/hfls3_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls30/r1i4p6/hfls30_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls300/r1i4p6/hfls300_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls301/r1i4p6/hfls301_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls302/r1i4p6/hfls302_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls303/r1i4p6/hfls303_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls304/r1i4p6/hfls304_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls305/r1i4p6/hfls305_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls306/r1i4p6/hfls306_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls307/r1i4p6/hfls307_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls308/r1i4p6/hfls308_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls309/r1i4p6/hfls309_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls31/r1i4p6/hfls31_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls310/r1i4p6/hfls310_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls311/r1i4p6/hfls311_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls312/r1i4p6/hfls312_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls313/r1i4p6/hfls313_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls314/r1i4p6/hfls314_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls315/r1i4p6/hfls315_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls316/r1i4p6/hfls316_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls317/r1i4p6/hfls317_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls318/r1i4p6/hfls318_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls319/r1i4p6/hfls319_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls32/r1i4p6/hfls32_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls320/r1i4p6/hfls320_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls321/r1i4p6/hfls321_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls322/r1i4p6/hfls322_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls323/r1i4p6/hfls323_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls324/r1i4p6/hfls324_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls325/r1i4p6/hfls325_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls326/r1i4p6/hfls326_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls327/r1i4p6/hfls327_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls328/r1i4p6/hfls328_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls329/r1i4p6/hfls329_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls33/r1i4p6/hfls33_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls330/r1i4p6/hfls330_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls331/r1i4p6/hfls331_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls332/r1i4p6/hfls332_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls333/r1i4p6/hfls333_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls334/r1i4p6/hfls334_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls335/r1i4p6/hfls335_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls336/r1i4p6/hfls336_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls337/r1i4p6/hfls337_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls338/r1i4p6/hfls338_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls339/r1i4p6/hfls339_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls34/r1i4p6/hfls34_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls340/r1i4p6/hfls340_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls341/r1i4p6/hfls341_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls342/r1i4p6/hfls342_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls343/r1i4p6/hfls343_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls344/r1i4p6/hfls344_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls345/r1i4p6/hfls345_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls346/r1i4p6/hfls346_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls347/r1i4p6/hfls347_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls348/r1i4p6/hfls348_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls349/r1i4p6/hfls349_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls35/r1i4p6/hfls35_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls350/r1i4p6/hfls350_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls351/r1i4p6/hfls351_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls352/r1i4p6/hfls352_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls353/r1i4p6/hfls353_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls354/r1i4p6/hfls354_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls355/r1i4p6/hfls355_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls356/r1i4p6/hfls356_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls357/r1i4p6/hfls357_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls358/r1i4p6/hfls358_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls359/r1i4p6/hfls359_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls36/r1i4p6/hfls36_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls360/r1i4p6/hfls360_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls361/r1i4p6/hfls361_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls362/r1i4p6/hfls362_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls363/r1i4p6/hfls363_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls364/r1i4p6/hfls364_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls365/r1i4p6/hfls365_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls366/r1i4p6/hfls366_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls367/r1i4p6/hfls367_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls368/r1i4p6/hfls368_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls369/r1i4p6/hfls369_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls37/r1i4p6/hfls37_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls370/r1i4p6/hfls370_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls371/r1i4p6/hfls371_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls372/r1i4p6/hfls372_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls373/r1i4p6/hfls373_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls374/r1i4p6/hfls374_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls375/r1i4p6/hfls375_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls376/r1i4p6/hfls376_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls377/r1i4p6/hfls377_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls378/r1i4p6/hfls378_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls379/r1i4p6/hfls379_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls38/r1i4p6/hfls38_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls380/r1i4p6/hfls380_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls381/r1i4p6/hfls381_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls382/r1i4p6/hfls382_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls383/r1i4p6/hfls383_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls384/r1i4p6/hfls384_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls385/r1i4p6/hfls385_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls386/r1i4p6/hfls386_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls387/r1i4p6/hfls387_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls388/r1i4p6/hfls388_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls389/r1i4p6/hfls389_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls39/r1i4p6/hfls39_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls390/r1i4p6/hfls390_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls391/r1i4p6/hfls391_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls392/r1i4p6/hfls392_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls393/r1i4p6/hfls393_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls394/r1i4p6/hfls394_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls395/r1i4p6/hfls395_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls396/r1i4p6/hfls396_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls397/r1i4p6/hfls397_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls398/r1i4p6/hfls398_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls399/r1i4p6/hfls399_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls4/r1i4p6/hfls4_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls40/r1i4p6/hfls40_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls41/r1i4p6/hfls41_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls42/r1i4p6/hfls42_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls43/r1i4p6/hfls43_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls44/r1i4p6/hfls44_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls45/r1i4p6/hfls45_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls46/r1i4p6/hfls46_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls47/r1i4p6/hfls47_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls48/r1i4p6/hfls48_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls49/r1i4p6/hfls49_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls5/r1i4p6/hfls5_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls50/r1i4p6/hfls50_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls51/r1i4p6/hfls51_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls52/r1i4p6/hfls52_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls53/r1i4p6/hfls53_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls54/r1i4p6/hfls54_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls55/r1i4p6/hfls55_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls56/r1i4p6/hfls56_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls57/r1i4p6/hfls57_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls58/r1i4p6/hfls58_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls59/r1i4p6/hfls59_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls6/r1i4p6/hfls6_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls60/r1i4p6/hfls60_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls61/r1i4p6/hfls61_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls62/r1i4p6/hfls62_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls63/r1i4p6/hfls63_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls64/r1i4p6/hfls64_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls65/r1i4p6/hfls65_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls66/r1i4p6/hfls66_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls67/r1i4p6/hfls67_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls68/r1i4p6/hfls68_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls69/r1i4p6/hfls69_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls7/r1i4p6/hfls7_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls70/r1i4p6/hfls70_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls71/r1i4p6/hfls71_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls72/r1i4p6/hfls72_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls73/r1i4p6/hfls73_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls74/r1i4p6/hfls74_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls75/r1i4p6/hfls75_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls76/r1i4p6/hfls76_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls77/r1i4p6/hfls77_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls78/r1i4p6/hfls78_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls79/r1i4p6/hfls79_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls8/r1i4p6/hfls8_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls80/r1i4p6/hfls80_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls81/r1i4p6/hfls81_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls82/r1i4p6/hfls82_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls83/r1i4p6/hfls83_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls84/r1i4p6/hfls84_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls85/r1i4p6/hfls85_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls86/r1i4p6/hfls86_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls87/r1i4p6/hfls87_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls88/r1i4p6/hfls88_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls89/r1i4p6/hfls89_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls9/r1i4p6/hfls9_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls90/r1i4p6/hfls90_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls91/r1i4p6/hfls91_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls92/r1i4p6/hfls92_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls93/r1i4p6/hfls93_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls94/r1i4p6/hfls94_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls95/r1i4p6/hfls95_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls96/r1i4p6/hfls96_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls97/r1i4p6/hfls97_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls98/r1i4p6/hfls98_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls99/r1i4p6/hfls99_A1_pcmdi-08a_2xco2_r1i4p6_197901-197902.nc
+""".split()
+    
+out = {
+   'old_cmor_tables_climatology_test_code' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-01/2xco2/monClim/atm/tasDiurnal/r1i1p1/tasDiurnal_A1_pcmdi-01_2xco2_r1i1p1_203001-203003_clim.nc'],
+   'old_cmor_tables_test_any_from_asc' : ['IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-01a_2xco2_r1i1p1_187001-187003.nc'],
+   'old_cmor_tables_test_any_from_asc_d' : ['IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-01a_2xco2_r1i1p1_187001-187003.nc'],
+   'old_cmor_tables_test_any_from_asc_i' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-08a_2xco2_r1i1p1_187001-187003.nc'],
+   'old_cmor_tables_karls_test' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atm/cl/r1i1p1/cl_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc',
+                   'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atmosphere/hfls/r1i1p1/hfls_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc',
+                   'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atm/mrsos/r1i1p1/mrsos_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atm/ps/r1i1p1/ps_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atm/ta/r1i1p1/ta_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atm/tas/r1i1p1/tas_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a01/2xco2/mon/atm/ua/r1i1p1/ua_A1_pcmdi-a01_2xco2_r1i1p1_203001-203002.nc'],
+   'old_cmor_tables_test1' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/hfls/r1i1p1/hfls_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc'],
+   'old_cmor_tables_test2' : ['IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/hfls/r1i1p1/hfls_2_pcmdi-01a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_2_pcmdi-01a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-01a_2xco2_r1i1p1_197901-197902_User-suffix-1979-2001.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-01a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-01a/2xco2/mon/atm/ua/r1i1p1/ua_2_pcmdi-01a_2xco2_r1i1p1_197901-197902_User-suffix-1979-2001.nc'],
+   'old_cmor_tables_test3' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/hfls/r1i1p1/hfls_2_pcmdi-08a_2xco2_r1i1p1_197901-197902_1979-2001.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_2_pcmdi-08a_2xco2_r1i1p1_197901-197902_1979-2001.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_197901-197902_1979-2001.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-08a_2xco2_r1i1p1_197901-197902_1979-2001.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_2_pcmdi-08a_2xco2_r1i1p1_197901-197902_1979-2001.nc'],
+   'old_cmor_tables_test4' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/hfls/r1i1p1/hfls_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+               'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc'],
+   'old_cmor_tables_main_prog' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/hfls/r1i1p1/hfls_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+                   'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+                   'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+                   'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc',
+                   'IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_2_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc'],
+   'old_cmor_tables_mytest_4d_r' : ['IPCC/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-a08_2xco2_r1i1p1_194901-194903.nc'],
+   'old_cmor_tables_rewrite_harvardf_data' :['IPCC_Fourth_Assessment/output/INSTITUTE_ID/20c3m/day/atm/tas/r1i1p1/tas_A_20c3m_r1i1p1_19920101-19920110.nc'],
+   'old_cmor_tables_test_3h' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/3hr/atm/hfls/r1i1p1/hfls_A3_pcmdi-08a_2xco2_r1i1p1_2030010101-2030010104.nc',
+                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/3hr/atm/pr/r1i1p1/pr_A3_pcmdi-08a_2xco2_r1i1p1_2030010101-2030010104.nc',
+                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/3hr/atm/tas/r1i1p1/tas_A3_pcmdi-08a_2xco2_r1i1p1_2030010101-2030010104.nc'],
+   'old_cmor_tables_test_dimensionless' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/cl/r1i1p1/cl_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/hfls/r1i1p1/hfls_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/mrsos/r1i1p1/mrsos_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/ps/r1i1p1/ps_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/ta/r1i1p1/ta_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/tas/r1i1p1/tas_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/tro3/r1i1p1/tro3_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc',
+                            'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-a08/2xco2/mon/atm/ua/r1i1p1/ua_A1_pcmdi-a08_2xco2_r1i1p1_203001-203002.nc'],
+   'old_cmor_tables_test_fortran_example_00' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/cl/r1i1p1/cl_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn.nc',
+                                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls/r1i1p1/hfls_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn-00.nc',
+                                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn-00.nc',
+                                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ps/r1i1p1/ps_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn-00.nc',
+                                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn-00.nc',
+                                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn-00.nc',
+                                 'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002_ftn-00.nc'],
+   'old_cmor_tables_test_fortran_example_01' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls/r1i1p1/hfls_A1_pcmdi-08a_2xco2_r1i1p1_198001-198002_ftn-01.nc',] ,
+   'old_cmor_tables_test_fortran_example_02' : ['Test/IPCC_Fourth_Assessment/output/INSTITUTE_ID/mon/REALM/hfls/r1i1p1/hfls_A1_r1i1p1_203001-203002_ftn-02.nc',
+                                 'Test/IPCC_Fourth_Assessment/output/INSTITUTE_ID/mon/REALM/mrsos/r1i1p1/mrsos_A1_r1i1p1_203001-203002_ftn-02.nc',
+                                 'Test/IPCC_Fourth_Assessment/output/INSTITUTE_ID/mon/REALM/ps/r1i1p1/ps_A1_r1i1p1_203001-203002_ftn-02.nc',
+                                 'Test/IPCC_Fourth_Assessment/output/INSTITUTE_ID/mon/REALM/tas/r1i1p1/tas_A1_r1i1p1_203001-203002_ftn-02.nc',
+                                 ],
+   'old_cmor_tables_test_station_data': [None],
+   'old_cmor_tables_test_cmor_grid_alejandro' : [None],
+   'old_cmor_tables_test_sophie': ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/fx/atmosphere/hfls/r0i0p0/hfls_A1_pcmdi-08a_r0i0p0.nc'],
+   'old_cmor_tables_test_region' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/hfogo/r1i1p1/hfogo_O1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc'],
+   'old_cmor_tables_test_sigma' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/cl/r1i1p1/cl_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/hfls/r1i1p1/hfls_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ps/r1i1p1/ps_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tro3/r1i1p1/tro3_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                    'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc'],
+   'old_cmor_tables_test_singleton' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/cl/r1i1p1/cl_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                        'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls/r1i1p1/hfls_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                        'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/mrsos/r1i1p1/mrsos_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                        'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ps/r1i1p1/ps_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                        'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                        'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/tas/r1i1p1/tas_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc',
+                        'IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ua/r1i1p1/ua_A1_pcmdi-08a_2xco2_r1i1p1_203001-203002.nc'],
+   'old_cmor_tables_mytest_4d_r_big_array' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_194901-194903.nc'],
+   'old_cmor_tables_mytest_4d_d_big_array_2' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_194901-194903.nc'],
+   'old_cmor_tables_mytest_4d_d_big_array_3' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_194901-194903.nc'],
+   'old_cmor_tables_mytest_4d_d_big_array_4' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_194901-194903.nc'],
+   'old_cmor_tables_mytest_4d_d_big_array_5' : ['IPCC/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atm/ta/r1i1p1/ta_2_pcmdi-08a_2xco2_r1i1p1_194901-194903.nc'],
+   'old_cmor_tables_test_lots_of_variables' : lots,
+   'old_cmor_tables_test_shrt_exp_nm_set_att_initi' : ['IPCC_Fourth_Assessment/output/INSTITUTE_ID/pcmdi-08a/2xco2/mon/atmosphere/hfls0/r1i1p1/hfls0_A1_pcmdi-08a_2xco2_r1i1p1_197901-197902.nc'],
+    }
diff --git a/Test/python_test_table_A b/Test/python_test_table_A
new file mode 100644
index 0000000..7292432
--- /dev/null
+++ b/Test/python_test_table_A
@@ -0,0 +1,2388 @@
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.0         ! version of CF that output conforms to
+project_id:   IPCC Fourth Assessment  ! project id
+table_id:     Table A1    ! table id
+table_date:   17 November 2004 ! date this table was constructed
+required_global_attributes: creation_date tracking_id model_id forcing
+
+expt_id_ok:   'pre-industrial control experiment'
+expt_id_ok:   'present-day control experiment'
+expt_id_ok:   'climate of the 20th Century experiment (20C3M)'
+expt_id_ok:   'committed climate change experiment'  ! official name(s) of 
+expt_id_ok:   'SRES A2 experiment'                   !  project's experiments
+expt_id_ok:   '720 ppm stabilization experiment (SRES A1B)'    
+expt_id_ok:   '550 ppm stabilization experiment (SRES B1)'
+expt_id_ok:   '1%/year CO2 increase experiment (to doubling)'
+expt_id_ok:   '1%/year CO2 increase experiment (to quadrupling)'
+expt_id_ok:   'slab ocean control experiment'
+expt_id_ok:   '2xCO2 equilibrium experiment'
+expt_id_ok:   'AMIP experiment'
+
+baseURL: http://cmip-pcmdi.llnl.gov
+
+magic_number: -1          ! used to check whether this file has been 
+                          !   altered from the official version.
+                          !   should be set to number of non-blank 
+                          !   characters in file. 
+approx_interval:  30.     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate), but this is ignored if set to 0.
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! SUBROUTINE ARGUMENT DEFAULT INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!  set default specifications for subroutine arguments to:
+!     required/indeterminate/optional/ignored/forbidden
+!    (indeterminate may or may not be required information, but is not always
+!     required as an argument of the function call)
+!
+!
+!============
+subroutine_entry: cmor_axis
+!============
+!
+required: table axis_name units length coord_vals cell_bounds
+ignored: interval
+!
+!============
+subroutine_entry: cmor_variable
+!============
+!
+required: table table_entry units axis_ids
+indeterminate: missing_value
+optional: tolerance original_name history comment
+ignored: positive
+!
+!============
+subroutine_entry: cmor_write
+!============
+!
+required:  var_id data 
+indeterminate: ntimes_passed time_vals time_bnds store_with
+optional: file_suffix
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! AXIS INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! ??? what about climatology???
+! ??? what about model level data???
+!
+!
+!  TEMPLATE FOR AXES
+!
+!============
+!axis_entry:               ! (required)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+!    acceptable arguments include units length coord_vals cell_bounds interval
+!required:                  ! (default: table axis_name units length
+!                                        coord_vals cell_bounds)
+!indeterminate:
+!optional:
+!ignored:                   ! (default: interval)
+!forbidden:
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+!standard_name:             ! (required)
+!units:                     ! (required)
+!axis:                      ! X, Y, Z, T (default: undeclared)
+!positive:                  ! up or down (default: undeclared)
+!long_name:                 ! (default: undeclared)
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+!out_name:                ! (default: same as axis_entry) 
+!type:                    ! double (default), real, character, integer
+!stored_direction:        ! increasing (default) or decreasing
+!valid_min:               ! type: double precision (default: no check performed
+!valid_max:               ! type: double precision (default: no check performed
+!requested:               ! space-separated list of requested coordinates 
+                          !       (default: undeclared)
+!bounds_requested:        ! space-separated list of requested coordinate bounds
+                          !       (default: undeclared)
+!tol_on_requests:         ! fractional tolerance for meeting request
+                          !  (default=1.e-3, which is used in the formula:
+                          !     eps =  MIN(( tol*interval between grid-points)
+                          !          and (1.e-3*tol*coordinate value)))
+!value:                   ! of scalar (singleton) dimension 
+!bounds_values:           ! of scalar (singleton) dimension bounds
+!----------------------------------	
+!
+!
+!  TEMPLATE FOR VARIABLES
+!
+!
+!============
+!variable_entry:                ! (required)
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+!        acceptable arguments include  file_suffix missing_value tolerance 
+!                               original_name history comment positive
+!required:                   ! (default: table table_entry units axis_ids)
+!indeterminate:              ! (default: file_suffix missing_value)
+!optional:                   ! (default: original_name history comment)
+!ignored:                    ! (default: positive)
+!forbidden:
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+!standard_name:              ! (required)
+!units:                      ! (required)
+!cell_methods:               ! (default: undeclared)
+!long_name:                  ! (default: undeclared)
+!comment:                    ! (default: undeclared)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+!dimensions:                 ! (required)  (scalar dimension(s) should appear
+                             !      last in list)
+!out_name:                   ! (default: variable_entry)
+!type:                       ! real (default), double, integer 
+!positive:                   ! up or down (default: undeclared)
+!valid_min:                  ! type: real (default: no check performed)
+!valid_max:                  ! type: real (default: no check performed)
+!ok_min_mean_abs:            ! type: real (default: no check performed)
+!ok_max_mean_abs:            ! type: real (default: no check performed)
+!----------------------------------	
+! 
+
+!
+!============
+axis_entry: longitude
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    longitude
+units:            degrees_east
+axis:             X
+long_name:        longitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lon
+valid_min:        0.           ! CMOR will add n*360 to input values
+                               ! (where n is an integer) to ensure 
+                               !  longitudes are in proper range.  The
+                               !  data will also be rearranged 
+                               !  appropriately.
+valid_max:        360.         !  see above comment.
+!----------------------------------	
+!
+!
+!=============
+axis_entry: latitude
+!=============
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    latitude
+units:            degrees_north
+axis:             Y
+long_name:        latitude
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lat
+valid_min:        -90.
+valid_max:        90.
+!----------------------------------	
+!
+!
+
+! ??? What about climatological data???
+!
+
+!============
+axis_entry: time
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: interval length
+indeterminate: coord_vals cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    time
+units:            days since ?
+axis:             T
+long_name:        time
+!----------------------------------	
+!
+!
+!============
+axis_entry: pressure
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+!requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 
+!requested:         30000. 25000. 20000. 15000. 10000.  7000.  5000.
+!requested:          3000.  2000.  1000.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height1
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        10.
+value:            2.
+!----------------------------------	
+!
+!
+!============
+axis_entry: height2
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    height
+units:            m
+axis:             Z
+positive:         up
+long_name:        height
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         height
+valid_min:        0.
+valid_max:        30.
+value:            10.
+!----------------------------------	
+!
+!
+!============
+axis_entry: depth1
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    depth
+units:            m
+axis:             Z
+positive:         down
+long_name:         depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         depth
+valid_min:        0.0
+valid_max:        1.0
+value:            0.05
+bounds_values:    0.0 0.1
+!----------------------------------
+!
+!
+!============
+axis_entry: pressure1
+!
+!   Scalar dimension (200 hPa) defined for near-tropopause radiation fluxes
+!      (rsntp, rlntp, rsntpcs, rlntpcs, rsftropa_?, rsftropi_?, rlftropa_?, 
+!       rlftropi_?, rsftropacs_?, rsftropics_?, rlftropacs_?, rlftropics_?)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+ignored: cell_bounds
+!------------
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+valid_min:        10000.
+valid_max:        30000.
+value:            20000.
+!----------------------------------
+!
+!
+!============
+axis_entry: pressure2
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+stored_direction: decreasing
+units:            Pa
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+bounds_requested: 100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.   0.
+!bounds_requested:  56000. 44000. 44000. 31000. 31000. 18000.
+!bounds_requested:  18000.     0.
+!----------------------------------!
+!
+!
+!============
+axis_entry: pressure3
+!
+!   Is defined for Table A1e: sulfate aerosol data (trsul)
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: cell_bounds
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    air_pressure
+units:            Pa 
+axis:             Z
+positive:         down
+long_name:        pressure
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         plev
+stored_direction: decreasing
+valid_min:        0.
+valid_max:        110000.
+requested:        100400. 98300. 95300. 91000. 84800. 76500. 66300. 
+requested:         54600. 42500. 31800. 23800. 18300. 14000. 10300.
+requested:          7200.  4700.  2700.  1300.   400.
+!----------------------------------	
+!
+!
+!============
+axis_entry: tau
+!============
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    cloud_optical_depth
+units:            1
+long_name:        optical depth
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+bounds_requested:  0.0  0.3  0.3  1.3  1.3  3.6  3.6  9.4 
+bounds_requested:  9.4 23.0 23.0 60.0 60.0 100000.
+!----------------------------------
+!
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+convert_to:       standard_hybrid_sigma
+z_factors:        ptop: ptop sigma: sigma ps: ps
+z_bounds_factors: ptop: ptop sigma: sigma_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+stored_direction: decreasing
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+convert_to:       standard_hybrid_sigma
+z_factors:        p0: p0 ap: ap b: b ps: ps
+z_bounds_factors: p0 ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+!    Override default argument specifications for cmor_axis 
+!------------
+optional: units
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: a b: b orog: orog
+z_bounds_factors: a: a_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+! VARIABLE INFORMATION
+!
+!*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+!
+!
+!
+! ***************************************************************
+!
+! Vertical dimensionless coordinate variables:
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: p0
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       reference pressure for hybrid sigma coordinate 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: sigma_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:  sigma coordinate for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate A coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   alternate hybrid sigma coordinate A coefficient for layer bounds
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+ignored: axis_ids
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!============
+variable_entry: az
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate coefficient (eta) for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz
+!============
+!
+!    Override default argument specifications for cmor_variable 
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid height coordinate coefficient (tau) for layer
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: az_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate coefficient (eta) for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: bz_bnds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+optional: units
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   hybrid sigma coordinate B coefficient (tau) for layer bounds
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         zlevel
+type:               double
+!----------------------------------
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1a: Monthly-mean 2-d atmosphere or land surface data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: psl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_pressure_at_sea_level     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Sea Level Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        90000.
+valid_max:        120000.
+ok_min_mean_abs:  102000.
+ok_max_mean_abs:  98000.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: pr
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Precipitation
+comment:        includes all types (rain, snow, large-scale, convective, etc.)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          1.e-3
+ok_min_mean_abs:    1.e-6
+ok_max_mean_abs:    5.e-5 
+!----------------------------------	
+!
+!
+!============
+variable_entry: tas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   air_temperature     
+units:           K
+cell_methods:    time: mean
+long_name:       Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        195.
+valid_max:        330.
+ok_min_mean_abs:  270.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: mrsos
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: moisture_content_of_soil_layer
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Moisture in Upper 0.1 m of Soil Column
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time depth1
+!----------------------------------	 
+!
+!
+!============
+variable_entry: mrso
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: soil_moisture_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Total Soil Moisture Content
+comment:         includes subsurface frozen water but not surface snow and ice 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	 
+!
+!
+!============
+variable_entry: tauu
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downward_eastward_stress
+units:         Pa
+cell_methods:  time: mean
+long_name:     Zonal Surface Wind Stress
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: tauv
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downward_northward_stress
+units:         Pa
+cell_methods:  time: mean
+long_name:     Meridional Surface Wind Stress
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: snd
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_thickness
+units:         m
+cell_methods:  time: mean
+long_name:     Snow Depth
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfls
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_latent_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Latent Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        -120
+valid_max:        900.
+ok_min_mean_abs:  50.
+ok_max_mean_abs:  120.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: hfss
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upward_sensible_heat_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Sensible Heat Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Downwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+valid_min:        20.
+valid_max:        600.
+ok_min_mean_abs:  300.
+ok_max_mean_abs:  370.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Upwelling Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         up
+valid_min:        50.
+valid_max:        750.
+ok_min_mean_abs:  250.
+ok_max_mean_abs:  450.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsds
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Downwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+valid_min:        0.
+valid_max:        550.
+ok_min_mean_abs:  150.
+ok_max_mean_abs:  220.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsus
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Surface Upwelling Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: ts
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_temperature
+units:         K    
+cell_methods:  time: mean
+long_name:     Surface Skin Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        170.
+valid_max:        340.
+ok_min_mean_abs:  280.
+ok_max_mean_abs:  300.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: ps
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   surface_air_pressure     
+units:           Pa
+cell_methods:    time: mean
+long_name:       Surface Pressure
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.48e5
+valid_max:        1.1e5
+ok_min_mean_abs:  0.97e5
+ok_max_mean_abs:  1.0e5
+!----------------------------------	
+!
+!
+!============
+variable_entry: prsn
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  snowfall_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Snowfall Flux
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: prc
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  convective_precipitation_flux
+units:          kg m-2 s-1
+cell_methods:   time: mean
+long_name:      Convective Precipitation
+comment:        includes both liquid and solid phases
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: prw
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  atmosphere_water_vapor_content
+units:          kg m-2
+cell_methods:   time: mean
+long_name:      Precipitable Water
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude time
+valid_min:          0.0
+valid_max:          150.
+ok_min_mean_abs:    20.
+ok_max_mean_abs:    30. 
+!----------------------------------	
+!
+!
+!============
+variable_entry: mrfso
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: soil_frozen_water_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Soil Frozen Water Content
+comment:       excludes surface snow and ice
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+!----------------------------------	 
+!
+!
+!============
+variable_entry: mrros
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_runoff_flux
+units:         kg m-2 s-1
+cell_methods:  time: mean
+long_name:     Surface Runoff
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	 
+!
+!
+!============
+variable_entry: mrro
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: runoff_flux
+units:         kg m-2 s-1
+cell_methods:  time: mean
+long_name:     Surface and Subsurface Runoff
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	 
+!
+!
+!============
+variable_entry: snw
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_amount_where_land
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Snow Amount
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+!----------------------------------	 
+!
+!
+!============
+variable_entry: snc
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_area_fraction_where_land
+units:         %
+cell_methods:  time: mean
+long_name:     Snow Area Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+valid_max:          100.
+!----------------------------------	 
+!
+!
+!============
+variable_entry: snm
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_snow_melt_flux_where_land
+units:         kg m-2 s-1
+cell_methods:  time: mean
+long_name:     Snow Melt
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:          0.0
+!----------------------------------	 
+!
+!
+!============
+variable_entry: uas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   eastward_wind    
+units:           m s-1
+cell_methods:    time: mean
+long_name:       Zonal Surface Wind Speed
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height2
+!----------------------------------	
+! 
+!
+!============
+variable_entry: vas
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   northward_wind    
+units:           m s-1
+cell_methods:    time: mean
+long_name:       Meridional Surface Wind Speed
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height2
+!----------------------------------	
+! 
+!
+!============
+variable_entry: huss
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:   specific_humidity   
+units:           kg kg-1
+cell_methods:    time: mean
+long_name:       Surface Specific Humidity
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+valid_min:        0.0
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsdt
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_incoming_shortwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     TOA Incident Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsut
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_shortwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     TOA Reflected Shortwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlut
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_longwave_flux
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Outgoing Longwave Radiation
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        10.
+valid_max:        500.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rtmt
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_downward_radiative_flux_at_top_of_atmosphere_model
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Flux at Top of Model
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsntp
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_downward_shortwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Downward Shortwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlntp
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_upward_longwave_flux_in_air
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Upward Longwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsntpcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_downward_shortwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Downward Clear-Sky Shortwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlntpcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: net_upward_longwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Net Upward Clear-Sky Longwave Flux at 200 hPa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time pressure1
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsdscs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Incident Surface Clear-Sky Shortwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsuscs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Reflected Surface Clear-Sky Shortwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rldscs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Downwelling Surface Clear-Sky Longwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         down
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rlutcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_longwave_flux_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Outgoing Clear-Sky Longwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        10.
+valid_max:        500.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: rsutcs
+!============
+!
+!    Override default argument specifications for cmor_variable
+!------------
+required: positive
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: toa_outgoing_shortwave_flux_assuming_clear_sky
+units:         W m-2
+cell_methods:  time: mean
+long_name:     Reflected Clear-Sky Shortwave
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.
+positive:         up
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clt2
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: cloud_area_fraction
+units:         %
+cell_methods:  time: mean
+long_name:     Total Cloud Fraction
+deflate: 1
+deflate_level: 9
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+valid_max:        100.0
+ok_min_mean_abs:  30.
+ok_max_mean_abs:  75.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clt
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: cloud_area_fraction
+units:         %
+cell_methods:  time: mean
+long_name:     Total Cloud Fraction
+deflate: 0
+deflate_level: 0
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+valid_max:        100.0
+ok_min_mean_abs:  30.
+ok_max_mean_abs:  75.
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clwvi
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_cloud_condensed_water_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Column Integerated Cloud Water Content
+comment:       should include both liquid and solid phase
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+!----------------------------------	
+! 
+!
+!============
+variable_entry: clivi
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_cloud_ice_content
+units:         kg m-2
+cell_methods:  time: mean
+long_name:     Column Integerated Cloud Ice Content
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+valid_min:        0.0
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1b: Time-independent 2-d land surface data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: orog
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: surface_altitude
+units:         m
+long_name:     Surface Altitude
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        -500.
+valid_max:        12000.
+ok_min_mean_abs:  0.
+ok_max_mean_abs:  2000.
+!----------------------------------	
+!
+!
+!============
+variable_entry: sftlf
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: land_area_fraction
+units:         %
+long_name:     Land Area Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        0.0
+valid_max:        100.
+ok_min_mean_abs:  20.
+ok_max_mean_abs:  40.
+!----------------------------------	
+!
+!
+!============
+variable_entry: sftgif
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: land_ice_area_fraction
+units:         %
+long_name:     Fraction of Grid Cell Covered with Glacier
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+valid_min:        0.0
+valid_max:        100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: mrsofc
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: soil_moisture_content_at_field_capacity
+units:         kg m-2
+long_name:     Capacity of Soil to Store Water
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1c: Monthly-mean 3-d atmosphere data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: cl
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name:  cloud_area_fraction_in_atmosphere_layer
+units:          %
+cell_methods:   time: mean
+long_name:      Cloud Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         longitude latitude zlevel time
+valid_min:          0.0
+valid_max:          100.0
+ok_min_mean_abs:    10.0
+ok_max_mean_abs:    90.0
+!----------------------------------	
+!
+!
+!============
+variable_entry: ta
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: mean
+long_name:     Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure2 time
+valid_min:        150.
+valid_max:        350.
+ok_min_mean_abs:  200.
+ok_max_mean_abs:  300.
+!----------------------------------	
+!
+!
+!============
+variable_entry: ua
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: eastward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Zonal Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -200.
+valid_max:        300.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  100.
+!----------------------------------	
+!
+!
+!============
+variable_entry: va
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: northward_wind
+units:         m s-1
+cell_methods:  time: mean
+long_name:     Meridional Wind Component
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        -100.
+valid_max:        100.
+ok_min_mean_abs:  0.1
+ok_max_mean_abs:  50.
+!----------------------------------	
+!
+!
+!============
+variable_entry: hus
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: specific_humidity
+units:         1
+cell_methods:  time: mean
+long_name:     Specific Humidity 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: wap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: lagrangian_tendency_of_air_pressure
+units:         Pa s-1
+cell_methods:  time: mean
+long_name:     Omega (=dp/dt) 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: zg
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: geopotential_height
+units:         m
+cell_methods:  time: mean
+long_name:     Geopotential Height 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!============
+variable_entry: hur
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: relative_humidity
+units:         %
+cell_methods:  time: mean
+long_name:     Relative Humidity 
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+valid_min:        0.
+valid_max:        100.
+ok_min_mean_abs:  1.
+ok_max_mean_abs:  99.
+!----------------------------------	
+!
+!
+!============
+variable_entry: tro3
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: mole_fraction_of_o3_in_air
+units:         1e-9
+cell_methods:  time: mean
+long_name:     Ozone Mole Fraction
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure time
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1d: Monthly-mean 3-d ISCCP simulator data
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: clisccp
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: isccp_cloud_area_fraction
+units:         1
+cell_methods:  time: mean
+long_name:     Cloud Fraction as Calculated by the ISCCP Simulator
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure2 tau time
+valid_min:        0.0
+valid_max:        1.0
+ok_min_mean_abs:  0.001
+ok_max_mean_abs:  0.9
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1e: Monthly-mean 2-d and 3-d sulfate aerosol fields
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: trsul
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: mass_concentration_of_sulfate_aerosol_in_air 
+units:         1e-9 kg m-3
+cell_methods:  time: mean
+long_name:     Mass Concentration of Sulfate Aerosol
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude pressure3 time
+!----------------------------------	
+!
+!
+!============
+variable_entry: trsult
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_content_of_sulfate_aerosol 
+units:         1e-6 kg m-2
+cell_methods:  time: mean
+long_name:     Sulfate Burden
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!
+!
+! ***************************************************************
+!
+! IPCC Table A1f: Monthly-mean land surface fields and prescribed land surface characteristics
+!
+! ***************************************************************
+!
+!
+!
+!============
+variable_entry: prveg
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: precipitation_flux_onto_canopy
+units:         kg m-2 s-1 
+cell_methods:  time: mean
+long_name:     Precipitation Intercepted by Vegetation Canopy
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!============
+variable_entry: evspsblveg
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: water_evaporation_flux_from_canopy
+units:         kg m-2 s-1 
+cell_methods:  time: mean
+long_name:     Evaporation from Vegetation Canopy
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!============
+variable_entry: zmla
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: atmosphere_boundary_layer_thickness
+units:         m
+cell_methods:  time: mean
+long_name:     Atmospheric Boundary Layer Thickness
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time
+!----------------------------------	
+!
+!
+!============
+variable_entry: rootd
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: root_depth
+units:         m
+long_name:     Root Depth
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude
+!----------------------------------	
+!
+!
+!============
+variable_entry: tasmin
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: minimum within days time: mean over days
+long_name:     Daily Minimum Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+!----------------------------------	
+!
+!
+!============
+variable_entry: tasmax
+!============
+!
+! Variable attributes:
+!----------------------------------	
+standard_name: air_temperature
+units:         K
+cell_methods:  time: maximum within days time: mean over days
+long_name:     Daily Miximum Surface Air Temperature
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:       longitude latitude time height1
+!----------------------------------	
+!
+!
diff --git a/Test/rewrite_harvardf_data.f90 b/Test/rewrite_harvardf_data.f90
new file mode 100644
index 0000000..7257596
--- /dev/null
+++ b/Test/rewrite_harvardf_data.f90
@@ -0,0 +1,125 @@
+      program rewrite_harvardf_data
+
+!  Use CMOR routines to rewrite Harvard Forest obs data into CF-standard netCDF.
+!  Start with data in easy-to-read ASCII text (Mathematica input) format, which
+!  was produced by the script read_harvard_forest_obs_dat.py.
+
+!  Note: first line of each input data file is ASCII text to be skipped over.
+
+!		Curt Covey		January 2006
+
+USE cmor_users_functions
+
+      character(len = 25) :: input_file   = 'Test/tas_harvardf.txt'
+      character(len = 20) :: output_file  = 'tas_harvardf.nc'
+      character(len = 20) :: units_string = 'K'
+!     character(len = 20) :: input_table  = 'IPCC_test_table_A'
+!!$      character(len = 20) :: input_table  = 'IPCC_table_A2'
+      character(len = 20) :: input_table  = 'Tables/CMIP5_day'
+
+      character :: first_line    ! throwaway
+
+      integer   :: iaxis(3)      ! identifier for axes (time, latitude, longitude)
+
+!!$      integer, parameter :: ndatalines = 4383 ! # lines in file that contain data
+      integer, parameter :: ndatalines = 10 ! # lines in file that contain data
+                                              ! ( = total # lines in file - 1)
+      integer, parameter :: np1 = ndatalines + 1
+
+      double precision      :: lat(1)        ! single-member array to hold latitude
+      double precision      :: lon(1)        ! single-member array to hold longitude
+      double precision      :: blat(2)        ! single-member array to hold latitude
+      double precision      :: blon(2)        ! single-member array to hold longitude
+      double precision      :: t(ndatalines) ! array to hold time coordinate
+      double precision      :: tbounds(np1)  ! array to hold time coordinate cell bounds
+      real      :: x(ndatalines,1,1) ! array to hold data from each input data file
+      double precision bt
+      bt=0.
+!    -Harvard Forest is located at 42.5 deg N, 72.2 deg W ...
+      lat(1) = 42.5d0
+      lon(1) = 360-72.2d0
+      blat(1) = 42.5d0
+      blon(1) = 360-72.2d0
+      blat(2) = 42.5d0
+      blon(2) = 360-72.2d0
+!     ... and is 3000 acres ~ a circle with radius of 0.02 deg lat/lon:
+      latlonrad = 0.02
+      do i = 1, ndatalines
+         t(i)       = i - 1.0  ! time coord  = "days since" =  0,       1, ...
+         tbounds(i) = i - 1.5  ! time bounds =           -0.5,    +0.5,    ...
+      enddo
+      tbounds(np1) = ndatalines - 0.5
+
+      print *, 'Opening ', input_file, '...'
+      open(10, file = input_file)
+      read(10, '(A)') first_line
+      print    '(A)', 'First line begins with: ', first_line
+      do i = 1, ndatalines
+         read(10, '(F6.2)') x(i,1,1)
+!        print *, x(i,1,1)
+      enddo
+
+      print *, 'Initializing CMOR ...'
+      ierrorflag = cmor_setup(netcdf_file_action = 'replace')
+
+      print *, 'Identifying output data sets for CMOR ...'
+      ierrorflag = cmor_dataset(                               &
+                      outpath       = 'Test',                    &
+                      experiment_id =                          &
+      'abrupt 4XCO2',        &
+                      institution   =                          &
+      'Berkeley CAS (Center for Atmospheric Science)',         &
+                      source        =                          &
+      'GICCM1 ftp://ftp.as.harvard.edu/pub/nigec/HU_Wofsy/hf_data',   &
+                      calendar      = 'gregorian',             &
+                      contact       =                          &
+      'Jasmin John, Berkeley CAS <jjohn at berkeley.edu>', &
+                      model_id = "GICCM1" ,institute_id="PCMDI",&
+                      parent_experiment_id='N/A',forcing='SO',branch_time=bt)
+
+!     print *, ' ** Time coordinate vector:', t
+!     print *, ' ** Time bounds vector:',     tbounds
+
+      print *, 'Defining coordinates for CMOR output data ...',t
+      iaxis(1)   = cmor_axis(                                  &
+                      table       = input_table,               &
+                      table_entry = 'time',                    &
+                      units       = 'days since 1992-1-1',     &
+                      length      = ndatalines,                &
+                      coord_vals  = t,                         &
+                      cell_bounds = tbounds)
+
+      iaxis(2)   = cmor_axis(                                  &
+                      table       = input_table,               &
+                      table_entry = 'latitude',                &
+                      units       = 'degrees_north',           &
+                      length      = 1,                         &
+                      coord_vals  = lat,                       &
+                      cell_bounds = blat)                       
+
+      iaxis(3)   = cmor_axis(                                  &
+                      table       = input_table,               &
+                      table_entry = 'longitude',               &
+                      units       = 'degrees_east',            &
+                      length      = 1,                         &
+                      coord_vals  = lon,                       &
+                      cell_bounds = blon)
+
+      print *, 'Defining CMOR output data variables ...'
+      ivarb     =  cmor_variable(                              &
+                      table       = input_table,               &
+                      table_entry = 'tas',                     &
+                      units       = units_string,              &
+                      axis_ids    = iaxis)
+
+!!$      print *, ' ** Data vector:', x
+
+      print *, 'Writing CMOR output ...',shape(x)
+      ierrorflag = cmor_write(                                 &
+                      var_id    = ivarb,                       &
+                      data      = x(:,1,1))
+
+      print *, 'Closing file(s) created by CMOR ...'
+      ierrorflag = cmor_close()
+
+      end program rewrite_harvardf_data
diff --git a/Test/speed_test_table_A b/Test/speed_test_table_A
new file mode 100644
index 0000000..8bea21c
--- /dev/null
+++ b/Test/speed_test_table_A
@@ -0,0 +1,2131 @@
+table_id: Table Amon
+modeling_realm: atmos
+
+frequency: mon
+
+cmor_version: 2.0         ! version of CMOR that can read this table
+cf_version:   1.4         ! version of CF that output conforms to
+project_id:   CMIP5  ! project id
+table_date:   02 April 2010 ! date this table was constructed
+
+missing_value: 1.e20      ! value used to indicate a missing value
+                          !   in arrays output by netCDF as 32-bit IEEE 
+                          !   floating-point numbers (float or real)
+
+baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation 
+product: output
+
+required_global_attributes: creation_date tracking_id forcing model_id parent_experiment_id branch_time contact ! space separated required global attribute 
+
+forcings:   N/A Nat Ant GHG SD SI SA TO SO Oz LU Sl Vl SS Ds BC MD OC AA
+
+expt_id_ok: '10- or 30-year run initialized in year XXXX' 'decadalXXXX'
+expt_id_ok: 'volcano-free hindcasts XXXX' 'noVolcXXXX'
+expt_id_ok: 'prediction with 2010 volcano' 'volcIn2010'
+expt_id_ok: 'pre-industrial control' 'piControl'
+expt_id_ok: 'Historical' 'historical'
+expt_id_ok: 'mid-Holocene' 'midHolocene'
+expt_id_ok: 'last glacial maximum' 'lgm'
+expt_id_ok: 'last millennium' 'past1000'
+expt_id_ok: 'RCP4.5' 'rcp45'
+expt_id_ok: 'RCP8.5' 'rcp85'
+expt_id_ok: 'RCP2.6' 'rcp26'
+expt_id_ok: 'RCP6' 'rcp60'
+expt_id_ok: 'ESM pre-industrial control' 'esmControl'
+expt_id_ok: 'ESM historical' 'esmHistorical'
+expt_id_ok: 'ESM RCP8.5' 'esmrcp85'
+expt_id_ok: 'ESM fixed climate 1' 'esmFixClim1'
+expt_id_ok: 'ESM fixed climate 2' 'esmFixClim2'
+expt_id_ok: 'ESM feedback 1' 'esmFdbk1'
+expt_id_ok: 'ESM feedback 2' 'esmFdbk2'
+expt_id_ok: '1 percent per year CO2' '1pctCO2'
+expt_id_ok: 'abrupt 4XCO2' 'abrupt4xCO2'
+expt_id_ok: 'natural-only' 'historicalNat'
+expt_id_ok: 'GHG-only' 'historicalGHG'
+expt_id_ok: 'anthropogenic-only' 'historicalAnt'
+expt_id_ok: 'anthropogenic sulfate aerosol direct effect only' 'historicalSD'
+expt_id_ok: 'anthropogenic sulfate aerosol indirect effect only' 'historicalSI'
+expt_id_ok: 'anthropogenic sulfate aerosol only' 'historicalSA'
+expt_id_ok: 'tropospheric ozone only' 'historicalTO'
+expt_id_ok: 'stratospheric ozone' 'historicalSO'
+expt_id_ok: 'ozone only' 'historicalOz'
+expt_id_ok: 'land-use change only' 'historicalLU'
+expt_id_ok: 'solar irradiance only' 'historicalSl'
+expt_id_ok: 'volcanic aerosol only' 'historicalVl'
+expt_id_ok: 'sea salt only' 'historicalSS'
+expt_id_ok: 'dust' 'historicalDs'
+expt_id_ok: 'black carbon only' 'historicalBC'
+expt_id_ok: 'mineral dust only' 'historicalMD'
+expt_id_ok: 'organic carbon only' 'historicalOC'
+expt_id_ok: 'anthropogenic aerosols only' 'historicalAA'
+expt_id_ok: 'AMIP' 'amip'
+expt_id_ok: '2030 time-slice' 'sst2030'
+expt_id_ok: 'control SST climatology' 'sstClim'
+expt_id_ok: 'CO2 forcing' 'sstClim4xCO2'
+expt_id_ok: 'all aerosol forcing' 'sstClimAerosol'
+expt_id_ok: 'sulfate aerosol forcing' 'sstClimSulfate'
+expt_id_ok: '4xCO2 AMIP' 'amip4xCO2'
+expt_id_ok: 'AMIP plus patterned anomaly' 'amipFuture'
+expt_id_ok: 'aqua planet control' 'aquaControl'
+expt_id_ok: '4xCO2 aqua planet' 'aqua4xCO2'
+expt_id_ok: 'aqua planet plus 4K anomaly' 'aqua4K'
+expt_id_ok: 'AMIP plus 4K anomaly' 'amip4K'
+
+
+approx_interval:  30.000000     ! approximate spacing between successive time
+                          !   samples (in units of the output time 
+                          !   coordinate.
+
+!============
+axis_entry: longitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    longitude
+units:            degrees_east
+axis:             X             ! X, Y, Z, T (default: undeclared)
+long_name:        longitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lon
+valid_min:        0         
+valid_max:        360 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: latitude
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    latitude
+units:            degrees_north
+axis:             Y             ! X, Y, Z, T (default: undeclared)
+long_name:        latitude
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lat
+valid_min:        -90         
+valid_max:        90 
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: plevs
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    air_pressure
+units:            Pa
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         down         ! up or down (default: undeclared)
+long_name:        pressure
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         plev
+stored_direction: decreasing
+tolerance:        0.001
+
+type:             double
+requested:        100000. 92500. 85000. 70000. 60000. 50000. 40000. 30000. 25000. 20000. 15000. 10000. 7000. 5000. 3000. 2000. 1000.        ! space-separated list of requested coordinates 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: alevhalf
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        atmospheric model half-level
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         lev
+type:             double
+must_have_bounds: no
+index_only:       ok
+!----------------------------------
+!
+
+
+!============
+axis_entry: time
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: time2
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    time
+units:            days since ?
+axis:             T             ! X, Y, Z, T (default: undeclared)
+long_name:        time
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         time
+stored_direction: increasing
+type:             double
+must_have_bounds: yes
+climatology:      yes
+!----------------------------------
+!
+
+
+!============
+axis_entry: height2m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        10 
+stored_direction: increasing
+type:             double
+value:            2.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+
+!============
+axis_entry: height10m
+!============
+!----------------------------------
+! Axis attributes:
+!----------------------------------
+standard_name:    height
+units:            m
+axis:             Z             ! X, Y, Z, T (default: undeclared)
+positive:         up         ! up or down (default: undeclared)
+long_name:        height
+!----------------------------------
+! Additional axis information:
+!----------------------------------
+out_name:         height
+valid_min:        1         
+valid_max:        30 
+stored_direction: increasing
+type:             double
+value:            10.            ! of scalar (singleton) dimension 
+must_have_bounds: no
+!----------------------------------
+!
+
+!============
+axis_entry: smooth_level
+!============
+!
+! This coordinate is a hybrid height coordinate with units of meters (m).
+!  It increases upward.
+!  The values of a(k)*ztop, which appear in the formula below, should be stored as smooth_level. 
+!  Note that in the netCDF file the variable will be named "lev", not smooth_level.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sleve_coordinate
+units:            m
+axis:             Z
+positive:	      up
+long_name:        atmosphere smooth level vertical (SLEVE) coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        -200.
+valid_max:        800000.
+formula:          z(n,k,j,i) = a(k)*ztop + b1(k)*zsurf1(n,j,i) + b2(k)*zsurf2(n,j,i)
+z_factors:        a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+z_bounds_factors: a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2
+!----------------------------------	
+!
+!============
+axis_entry: natural_log_pressure
+!============
+!
+!This coordinate is dimensionless and varies from near 0 at the surface and increases upward.
+!  The values of lev(k), which appears in the formula below, should be stored as natural_log_pressure.  
+!  Note that in the netCDF file the variable will be named "lev", not natural_log_pressure.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_ln_pressure_coordinate
+axis:             Z
+long_name:        atmosphere natural log pressure coordinate
+positive:	      down
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        -1.
+valid_max:        20.
+formula:          p(k) = p0 * exp(-lev(k))
+z_factors:        p0: p0 lev: lev
+z_bounds_factors: p0: p0 lev: lev_bnds
+!----------------------------------	
+!
+!============
+axis_entry: standard_sigma
+!============
+!
+! This coordinate is dimensionless and varies from 0 at the model top to 1.0 at the surface.
+!  The values of sigma(k), which appears in the formula below, should be stored as standard_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_sigma_coordinate
+axis:             Z
+positive:         down
+long_name:        sigma coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ptop + sigma(k)*(ps(n,j,i) - ptop)
+z_factors:        ptop: ptop sigma: lev ps: ps
+z_bounds_factors: ptop: ptop sigma: lev_bnds ps: ps
+!----------------------------------	
+!
+!
+!============
+axis_entry:  standard_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of a(k)+ b(k), which appear in the formula below, should be stored as standard_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not standard_hybrid_sigma.
+!
+!---------------------------------
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z 
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = a(k)*p0 + b(k)*ps(n,j,i)
+z_factors:        p0: p0 a: a b: b ps: ps
+z_bounds_factors: p0: p0 a: a_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  alternate_hybrid_sigma
+!============
+!
+! This coordinate is dimensionless and varies from a small value at the model top to 1.0 at the surface.
+!  The values of ap(k)/p0 + b(k), which appear in the formula below, should be stored as alternate_hybrid_sigma.  
+!  Note that in the netCDF file the variable will be named "lev", not alternate_hybrid_sigma.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_sigma_pressure_coordinate
+units:            1
+axis:             Z
+positive:         down
+long_name:        hybrid sigma pressure coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: decreasing
+valid_min:        0.0
+valid_max:        1.0
+formula:          p(n,k,j,i) = ap(k) + b(k)*ps(n,j,i)
+z_factors:        ap: ap b: b ps: ps
+z_bounds_factors: ap: ap_bnds b: b_bnds ps: ps
+!----------------------------------		
+!
+!
+!============
+axis_entry:  hybrid_height
+!============
+!
+! This coordinate has dimension of meters (m) and increases upward.
+!  The values of a(k) which appear in the formula below, should be stored as hybrid_height.  
+!  Note that in the netCDF file the variable will be named "lev", not hybrid_height.
+!
+!------------
+!
+! Axis attributes:
+!----------------------------------	
+standard_name:    atmosphere_hybrid_height_coordinate
+units:            m
+axis:             Z 
+positive:         up
+long_name:        hybrid height coordinate
+!----------------------------------	
+!
+! Additional axis information:
+!----------------------------------	
+out_name:         lev
+must_have_bounds: yes
+stored_direction: increasing
+valid_min:        0.0
+formula:          z(k,j,i) = a(k) + b(k)*orog(j,i)
+z_factors:        a: lev b: b orog: orog
+z_bounds_factors: a: lev_bnds b: b_bnds orog: orog
+!----------------------------------		
+!
+! ***************************************************************
+!
+! Vertical coordinate formula terms:
+!
+! ***************************************************************
+!
+!
+!============
+variable_entry:    orog
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_altitude
+units:             m
+long_name:         Surface Altitude
+comment:           height above the geoid; as defined here, ""the geoid"" is a surface of constant geopotential that, if the ocean were at rest, would coincide with mean sea level. Under this definition, the geoid changes as the mean volume of the ocean changes (e.g., due to glacial melt, or global warming of the ocean).  Report here the height above the present-day geoid.  Over ocean, report as 0.0
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude
+out_name:          orog
+type:              real
+valid_min:         -700
+valid_max:         1.00E+04
+!----------------------------------
+!
+!
+!============
+variable_entry: p0
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       vertical coordinate formula term: reference pressure 
+units:           Pa
+!----------------------------------	
+!
+!
+!============
+variable_entry: ptop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       pressure at top of model 
+units:           Pa
+!----------------------------------	
+!
+!
+!
+!============
+variable_entry: a
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b
+!============
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: a_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: a(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: b_bnds
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: b(k+1/2)
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------
+!
+!
+!============
+variable_entry: ap
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ap_bnds
+!============
+!
+! Variable attributes:
+!----------------------------------	
+long_name:   vertical coordinate formula term: ap(k+1/2)
+units:           Pa
+!----------------------------------	
+!
+! Additional variable information:
+!----------------------------------	
+dimensions:         alevel
+type:               double
+!----------------------------------	
+!
+!
+!============
+variable_entry: ztop
+!============
+!
+!------------
+!
+! Variable attributes:
+!----------------------------------	
+long_name:       height of top of model 
+units:           m
+!----------------------------------	
+!
+!
+!
+
+!============
+variable_entry:    tas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+deflate: ${DEFLATE_LEVEL}
+shuffle: ${SHUFFLE}
+deflate_level: ${DEFLATE_LEVEL}
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Near-Surface Air Temperature
+comment:           near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ts
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacello volume: volcello
+long_name:         Surface Temperature
+comment:           ""skin"" temperature (i.e., SST for open ocean)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ts
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmin
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: minimum within days time: mean over days
+long_name:         Daily Minimum Near-Surface Air Temperature
+comment:           monthly mean of the daily-minimum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmin
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tasmax
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: maximum within days time: mean over days
+long_name:         Daily Maximum Near-Surface Air Temperature
+comment:           monthly mean of the daily-maximum near-surface (usually, 2 meter) air temperature.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          tasmax
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    psl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_sea_level
+units:             Pa
+cell_methods:      time: mean
+long_name:         Sea Level Pressure
+comment:           not, in general, the same as surface pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          psl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ps
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_air_pressure
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Air Pressure
+comment:           not, in general, the same as mean sea-level pressure
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ps
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    uas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Eastward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) eastward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          uas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    vas
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Northward Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) northward component of wind.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          vas
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sfcWind
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     wind_speed
+units:             m s-1
+cell_methods:      time: mean
+long_name:         Near-Surface Wind Speed
+comment:           near-surface (usually, 10 meters) wind speed.  This is the mean of the speed, not the speed computed from the mean u and v components of wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height10m
+out_name:          sfcWind
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hurs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+long_name:         Near-Surface Relative Humidity
+comment:           near-surface (usually, 2meters) relative humidity expressed as a percentage.  This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          hurs
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    huss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+long_name:         Near-Surface Specific Humidity
+comment:           near-surface (usually, 2 meters) specific humidity.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time height2m
+out_name:          huss
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    pr
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Precipitation
+comment:           at surface; includes both liquid and solid phases from all types of clouds (both large-scale and convective)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          pr
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prsn
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     snowfall_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Snowfall Flux
+comment:           at surface; includes precipitation of all forms of water in the solid phase
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prsn
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    prc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     convective_precipitation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Convective Precipitation
+comment:           at surface; includes both liquid and solid phases.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prc
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    evspsbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_evaporation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Evaporation
+comment:           at surface; flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          evspsbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sbl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     water_sublimation_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Snow and Ice Sublimation Flux
+comment:           The snow and ice sublimation flux is the loss of snow and ice mass from the surface resulting from their conversion to water vapor that enters the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sbl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tauu
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_eastward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Eastward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauu
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    tauv
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downward_northward_stress
+units:             Pa
+cell_methods:      time: mean
+long_name:         Surface Downward Northward Wind Stress
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          tauv
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    hfls
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_latent_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Latent Heat Flux
+comment:           includes both evaporation and sublimation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfls
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    hfss
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upward_sensible_heat_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upward Sensible Heat Flux
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          hfss
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rlus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_longwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsds
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsds
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsus
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsuscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_upwelling_shortwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Upwelling Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsuscs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rldscs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     surface_downwelling_longwave_flux_in_air_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Surface Downwelling Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rldscs
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsdt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_incoming_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Incident Shortwave Radiation
+comment:           incident shortwave at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsdt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    rsut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Shortwave Radiation
+comment:           at the top of the atmosphere
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlut
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Longwave Radiation
+comment:           at the top of the atmosphere (to be compared with satellite measurements)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlut
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rlutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_longwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Longwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rlutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    rsutcs
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     toa_outgoing_shortwave_flux_assuming_clear_sky
+units:             W m-2
+cell_methods:      time: mean
+long_name:         TOA Outgoing Clear-Sky Shortwave Radiation
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rsutcs
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    prw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_water_vapor_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Water Vapor Path
+comment:           vertically integrated through the atmospheric column
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          prw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction
+units:             %
+cell_methods:      time: mean
+long_name:         Total Cloud Fraction
+comment:           for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clt
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clwvi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_condensed_water_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Condensed Water Path
+comment:           calculate mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clwvi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clivi
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_cloud_ice_content
+units:             kg m-2
+cell_methods:      time: mean
+long_name:         Ice Water Path
+comment:           calculate mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Include precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          clivi
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    rtmt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     net_downward_radiative_flux_at_top_of_atmosphere_model
+units:             W m-2
+cell_methods:      time: mean
+long_name:         Net Downward Flux at Top of Model
+comment:           i.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. Report only if this differs from the net downward radiative flux at the top of the atmosphere.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          rtmt
+type:              real
+positive:          down
+!----------------------------------
+!
+
+!============
+variable_entry:    ccb
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_base
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Base
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ccb
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cct
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure_at_convective_cloud_top
+units:             Pa
+cell_methods:      time: mean
+long_name:         Air Pressure at Convective Cloud Top
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          cct
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ci 
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Convection Occurs
+comment:           Fraction of time that convection occurs in the grid cell .
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          ci 
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    sci
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             1
+cell_methods:      time: mean
+long_name:         Fraction of Time Shallow Convection Occurs
+comment:           Fraction of time that shallow convection occurs in the grid cell. ( For models with a distinct shallow convection scheme only)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          sci
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2antt
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg  m-2 s-1
+cell_methods:      time: mean
+long_name:         Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Do not include natural fire sources, but include all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2antt
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2fos
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2
+comment:           This is requested only for the emission-driven coupled carbon climate model runs.  Report the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2fos
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    fco2nat
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg m-2 s-1
+cell_methods:      time: mean
+long_name:         Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources
+comment:           Report from all simulations (both emission-driven and concentration-driven) performed by models with fully interactive and responsive carbon cycles.  This is what the atmosphere sees (on its own grid).  This field should be equivalent to the combined natural fluxes of carbon (requested in the L_mon and O_mon tables) that account for natural exchanges between the atmosphere and land or ocean reservoirs (i.e., ""net ecosystem biospheric productivity"", for land, and ""ai [...]
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude time
+out_name:          fco2nat
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    cl
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     cloud_area_fraction_in_atmosphere_layer
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Cloud Area Fraction
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cl
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    clw
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_liquid_water_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Liquid Water
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cells. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          clw
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    cli
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mass_fraction_of_cloud_ice_in_air
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mass Fraction of Cloud Ice
+comment:           Report on model layers (not standard pressures).  Include both large-scale and convective cloud.  Calculate as the mass of cloud ice in the grid cell divided by the mass of air (including the water in all phases) in the grid cell. Include precipitating hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time
+out_name:          cli
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    mc
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     atmosphere_net_upward_convective_mass_flux
+units:             kg m-2 s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Convective Mass Flux
+comment:           Report on model half-levels (i.e., model layer bounds and not standard pressures).  The net mass flux should represent the difference between the updraft and downdraft components.  The flux is computed as the mass divided by the area of the grid cell.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time
+out_name:          mc
+type:              real
+positive:          up
+!----------------------------------
+!
+
+!============
+variable_entry:    ta
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_temperature
+units:             K
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Air Temperature
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ta
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ua
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     eastward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Eastward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ua
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    va
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     northward_wind
+units:             m s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Northward Wind
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          va
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hus
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     specific_humidity
+units:             1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Specific Humidity
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hus
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    hur
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     relative_humidity
+units:             %
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Relative Humidity
+comment:           This is the relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          hur
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    wap
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     lagrangian_tendency_of_air_pressure
+units:             Pa s-1
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         omega (=dp/dt)
+comment:           commonly referred to as ""omega"", this represents the vertical component of velocity in pressure coordinates (positive down)
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          wap
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    zg
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     geopotential_height
+units:             m
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Geopotential Height
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          zg
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of O3
+comment:           If this does not change over time (except possibly to vary identically over each annual cycle), report instead the variable described in the next table entry. 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    tro3Clim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_ozone_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of O3
+comment:           If O3 does not vary from one year to the next, report 12 months, starting with January.   (Note: include all 12 months even if the values don't vary seasonally.)  When calling CMOR, identify this variable as tro3Clim, not tro3. If the O3 varies from one year to the next,  then report instead the field described in the previous table entry.  
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          tro3
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2Clim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_carbon_dioxide_in_air
+units:             1e-6
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2Clim, not co2.   If  CO2 is spatially uniform, omit this field, but report Total Atmospheric Mass of CO2 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          co2
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2mass
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean
+long_name:         Total Atmospheric Mass of CO2
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    co2massClim
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+units:             kg
+cell_methods:      time: mean within years time: mean over years
+long_name:         Total Atmospheric Mass of CO2
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CO2 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as co2massClim, not co2mass.  If CO2 is spatially nonuniform, omit this field, but report Mole Fraction of CO2 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          co2mass
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4global, not ch4.   If  CH4 is spatially uniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          ch4
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4global
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of CH4
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If CH4 is spatially nonuniform, omit this field, but report Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    ch4globalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_methane_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of CH4
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the CH4 does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If CH4 is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of CH4 (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          ch4global
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2o
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+cell_measures:      area: areacella
+long_name:         Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as n2oglobal, not n2o.   If  N2O is spatially uniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry after the next).
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude plevs time2
+out_name:          n2o
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobal
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean
+long_name:         Global Mean Mole Fraction of N2O
+comment:           For some simulations (e.g., prescribed concentration pi-control run), this will not vary from one year to the next, and so report instead the variable described in the next table entry.  If N2O is spatially nonuniform, omit this field, but report Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    n2oglobalClim
+!============
+modeling_realm:    atmos atmosChem
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     mole_fraction_of_nitrous_oxide_in_air
+units:             1e-9
+cell_methods:      time: mean within years time: mean over years
+long_name:         Global Mean Mole Fraction of N2O
+comment:           Report only for simulations (e.g., prescribed concentration pi-control run), in which the N2O does not vary from one year to the next. Report 12 monthly values, starting with January, even if the values don't vary seasonally.  When calling CMOR, identify this variable as ch4globalClim, not ch4global.  If N2O is spatially nonuniform, omit this field, but report Global Mean Mole Fraction of N2O (see the table entry before the previous one). 
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        time2
+out_name:          n2oglobal
+type:              real
+!----------------------------------
+!
+
+
+!============
+variable_entry:    pfull
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Pressure on Model Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevel time2
+out_name:          pfull
+type:              real
+!----------------------------------
+!
+
+!============
+variable_entry:    phalf
+!============
+modeling_realm:    atmos
+!----------------------------------
+! Variable attributes:
+!----------------------------------
+standard_name:     air_pressure
+units:             Pa
+cell_methods:      time: mean within years time: mean over years
+cell_measures:      area: areacella
+long_name:         Pressure on Model Half-Levels
+!----------------------------------
+! Additional variable information:
+!----------------------------------
+dimensions:        longitude latitude alevhalf time2
+out_name:          phalf
+type:              real
+!----------------------------------
+!
+
diff --git a/Test/ta_3D_r_2.asc b/Test/ta_3D_r_2.asc
new file mode 100644
index 0000000..d269407
--- /dev/null
+++ b/Test/ta_3D_r_2.asc
@@ -0,0 +1,22 @@
+4
+3
+144
+17
+17
+time
+months since 1949-1-1 0:0
+0.0 1.0 2.0
+-0.5 0.5 0.5 1.5 1.5 2.5
+longitude
+degrees_east
+0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 27.5 30.0 32.5 35.0 37.5 40.0 42.5 45.0 47.5 50.0 52.5 55.0 57.5 60.0 62.5 65.0 67.5 70.0 72.5 75.0 77.5 80.0 82.5 85.0 87.5 90.0 92.5 95.0 97.5 100.0 102.5 105.0 107.5 110.0 112.5 115.0 117.5 120.0 122.5 125.0 127.5 130.0 132.5 135.0 137.5 140.0 142.5 145.0 147.5 150.0 152.5 155.0 157.5 160.0 162.5 165.0 167.5 170.0 172.5 175.0 177.5 180.0 182.5 185.0 187.5 190.0 192.5 195.0 197.5 200.0 202.5 205.0 207.5 210.0 212.5 215.0 217.5 220.0 22 [...]
+-1.25 1.25 1.25 3.75 3.75 6.25 6.25 8.75 8.75 11.25 11.25 13.75 13.75 16.25 16.25 18.75 18.75 21.25 21.25 23.75 23.75 26.25 26.25 28.75 28.75 31.25 31.25 33.75 33.75 36.25 36.25 38.75 38.75 41.25 41.25 43.75 43.75 46.25 46.25 48.75 48.75 51.25 51.25 53.75 53.75 56.25 56.25 58.75 58.75 61.25 61.25 63.75 63.75 66.25 66.25 68.75 68.75 71.25 71.25 73.75 73.75 76.25 76.25 78.75 78.75 81.25 81.25 83.75 83.75 86.25 86.25 88.75 88.75 91.25 91.25 93.75 93.75 96.25 96.25 98.75 98.75 101.25 101.25  [...]
+pressure
+hPa
+1000.0 925.0 850.0 700.0 600.0 500.0 400.0 300.0 250.0 200.0 150.0 100.0 70.0 50.0 30.0 20.0 10.0
+1037.5 962.5 962.5 887.5 887.5 775.0 775.0 650.0 650.0 550.0 550.0 450.0 450.0 350.0 350.0 275.0 275.0 225.0 225.0 175.0 175.0 125.0 125.0 85.0 85.0 60.0 60.0 40.0 40.0 25.0 25.0 15.0 15.0 5.0
+latitude
+degrees_north
+-20.0 -17.5 -15.0 -12.5 -10.0 -7.5 -5.0 -2.5 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0
+-21.25 -18.75 -18.75 -16.25 -16.25 -13.75 -13.75 -11.25 -11.25 -8.75 -8.75 -6.25 -6.25 -3.75 -3.75 -1.25 -1.25 1.25 1.25 3.75 3.75 6.25 6.25 8.75 8.75 11.25 11.25 13.75 13.75 16.25 16.25 18.75 18.75 21.25
+294.539123535 294.75982666 294.929748535 295.109436035 295.58013916 296.449279785 297.47076416 298.300842285 298.910217285 299.429748535 300.140686035 301.199279785 302.20904541 301.929748535 299.410217285 295.429748535 291.949279785 288.780456543 289.399597168 289.889831543 290.280456543 291.059753418 292.399597168 293.790222168 294.499206543 294.569519043 294.770690918 295.870300293 297.749206543 299.380065918 299.479675293 297.559753418 294.360534668 291.120300293 290.840240479 293.05 [...]
\ No newline at end of file
diff --git a/Test/ta_4D_r.asc b/Test/ta_4D_r.asc
new file mode 100644
index 0000000..1d21a5c
--- /dev/null
+++ b/Test/ta_4D_r.asc
@@ -0,0 +1,23 @@
+4
+17
+144
+3
+17
+pressure
+hPa
+1000.0 925.0 850.0 700.0 600.0 500.0 400.0 300.0 250.0 200.0 150.0 100.0 70.0 50.0 30.0 20.0 10.0
+1037.5 962.5 962.5 887.5 887.5 775.0 775.0 650.0 650.0 550.0 550.0 450.0 450.0 350.0 350.0 275.0 275.0 225.0 225.0 175.0 175.0 125.0 125.0 85.0 85.0 60.0 60.0 40.0 40.0 25.0 25.0 15.0 15.0 5.0
+longitude
+degrees_east
+0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 27.5 30.0 32.5 35.0 37.5 40.0 42.5 45.0 47.5 50.0 52.5 55.0 57.5 60.0 62.5 65.0 67.5 70.0 72.5 75.0 77.5 80.0 82.5 85.0 87.5 90.0 92.5 95.0 97.5 100.0 102.5 105.0 107.5 110.0 112.5 115.0 117.5 120.0 122.5 125.0 127.5 130.0 132.5 135.0 137.5 140.0 142.5 145.0 147.5 150.0 152.5 155.0 157.5 160.0 162.5 165.0 167.5 170.0 172.5 175.0 177.5 180.0 182.5 185.0 187.5 190.0 192.5 195.0 197.5 200.0 202.5 205.0 207.5 210.0 212.5 215.0 217.5 220.0 22 [...]
+-1.25 1.25 1.25 3.75 3.75 6.25 6.25 8.75 8.75 11.25 11.25 13.75 13.75 16.25 16.25 18.75 18.75 21.25 21.25 23.75 23.75 26.25 26.25 28.75 28.75 31.25 31.25 33.75 33.75 36.25 36.25 38.75 38.75 41.25 41.25 43.75 43.75 46.25 46.25 48.75 48.75 51.25 51.25 53.75 53.75 56.25 56.25 58.75 58.75 61.25 61.25 63.75 63.75 66.25 66.25 68.75 68.75 71.25 71.25 73.75 73.75 76.25 76.25 78.75 78.75 81.25 81.25 83.75 83.75 86.25 86.25 88.75 88.75 91.25 91.25 93.75 93.75 96.25 96.25 98.75 98.75 101.25 101.25  [...]
+time
+months since 1949-1-1 0:0
+0.0 1.0 2.0
+0. 1. 1. 2. 2. 3.
+latitude
+degrees_north
+-20.0 -17.5 -15.0 -12.5 -10.0 -7.5 -5.0 -2.5 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0
+-21.25 -18.75 -18.75 -16.25 -16.25 -13.75 -13.75 -11.25 -11.25 -8.75 -8.75 -6.25 -6.25 -3.75 -3.75 -1.25 -1.25 1.25 1.25 3.75 3.75 6.25 6.25 8.75 8.75 11.25 11.25 13.75 13.75 16.25 16.25 18.75 18.75 21.25
+294.539123535 294.75982666 294.929748535 295.109436035 295.58013916 296.449279785 297.47076416 298.300842285 298.910217285 299.429748535 300.140686035 301.199279785 302.20904541 301.929748535 299.410217285 295.429748535 291.949279785 295.839996338 295.810699463 296.179840088 296.789215088 297.220855713 297.570465088 298.310699463 299.230621338 299.720855713 299.810699463 300.349761963 301.810699463 303.339996338 303.470855713 301.640777588 298.660308838 295.800933838 295.949462891 296.00 [...]
+
diff --git a/Test/tas.asc b/Test/tas.asc
new file mode 100644
index 0000000..f4690a3
--- /dev/null
+++ b/Test/tas.asc
@@ -0,0 +1,17 @@
+3
+256
+128
+3
+longitude
+degrees_east
+-180.0 -178.59375 -177.1875 -175.78125 -174.375 -172.96875 -171.5625 -170.15625 -168.75 -167.34375 -165.9375 -164.53125 -163.125 -161.71875 -160.3125 -158.90625 -157.5 -156.09375 -154.6875 -153.28125 -151.875 -150.46875 -149.0625 -147.65625 -146.25 -144.84375 -143.4375 -142.03125 -140.625 -139.21875 -137.8125 -136.40625 -135.0 -133.59375 -132.1875 -130.78125 -129.375 -127.96875 -126.5625 -125.15625 -123.75 -122.34375 -120.9375 -119.53125 -118.125 -116.71875 -115.3125 -113.90625 -112.5 -1 [...]
+-180.703125 -179.296875 -179.296875 -177.890625 -177.890625 -176.484375 -176.484375 -175.078125 -175.078125 -173.671875 -173.671875 -172.265625 -172.265625 -170.859375 -170.859375 -169.453125 -169.453125 -168.046875 -168.046875 -166.640625 -166.640625 -165.234375 -165.234375 -163.828125 -163.828125 -162.421875 -162.421875 -161.015625 -161.015625 -159.609375 -159.609375 -158.203125 -158.203125 -156.796875 -156.796875 -155.390625 -155.390625 -153.984375 -153.984375 -152.578125 -152.578125  [...]
+latitude
+degrees_north
+-88.9277353523 -87.538705213 -86.1414721015 -84.7423855907 -83.3425960441 -81.9424662992 -80.5421464346 -79.1417096486 -77.7411958655 -76.3406287024 -74.9400230196 -73.5393886338 -72.1387322892 -70.7380587725 -69.337371575 -67.9366733026 -66.5359659402 -65.135251026 -63.7345297708 -62.3338031405 -60.9330719152 -59.5323367318 -58.1315981156 -56.7308565037 -55.3301122627 -53.9293657026 -52.5286170871 -51.1278666424 -49.7271145631 -48.3263610182 -46.9256061547 -45.5248501013 -44.1240929714  [...]
+-90.0 -88.2332202827 -88.2332202827 -86.8400886573 -86.8400886573 -85.4419288461 -85.4419288461 -84.0424908174 -84.0424908174 -82.6425311716 -82.6425311716 -81.2423063669 -81.2423063669 -79.8419280416 -79.8419280416 -78.4414527571 -78.4414527571 -77.0409122839 -77.0409122839 -75.640325861 -75.640325861 -74.2397058267 -74.2397058267 -72.8390604615 -72.8390604615 -71.4383955308 -71.4383955308 -70.0377151737 -70.0377151737 -68.6370224388 -68.6370224388 -67.2363196214 -67.2363196214 -65.8356 [...]
+time
+days since 0000-1-1
+682565.5 682595.0 682624.5
+682550.0 682581.0 682581.0 682609.0 682609.0 682640.0
+246 236 226 249 239 232 254 245 239 259 250 245 263 254 249 265 256 247 266 255 243 267 255 243 268 260 250 269 263 252 269 265 254 269 267 255 271 269 257 271 270 259 271 272 263 271 273 266 272 273 269 272 274 271 274 275 272 274 275 273 275 276 274 276 277 274 276 277 275 277 278 276 278 279 277 279 280 278 280 280 279 281 281 280 282 282 281 283 284 283 285 285 285 287 287 286 288 288 288 290 290 289 291 291 290 292 292 291 292 292 291 292 293 292 293 293 292 293 293 292 293 294 293  [...]
diff --git a/Test/tas_3D_noreorder.input b/Test/tas_3D_noreorder.input
new file mode 100644
index 0000000..d173d87
--- /dev/null
+++ b/Test/tas_3D_noreorder.input
@@ -0,0 +1 @@
+Test/tas_mytest_noreorder.asc
diff --git a/Test/tas_3D_xty_-180_180.asc b/Test/tas_3D_xty_-180_180.asc
new file mode 100644
index 0000000..bbc73e3
--- /dev/null
+++ b/Test/tas_3D_xty_-180_180.asc
@@ -0,0 +1,19 @@
+tas
+K
+3
+256
+3
+128
+longitude
+degrees_east
+-180.0 -178.59375 -177.1875 -175.78125 -174.375 -172.96875 -171.5625 -170.15625 -168.75 -167.34375 -165.9375 -164.53125 -163.125 -161.71875 -160.3125 -158.90625 -157.5 -156.09375 -154.6875 -153.28125 -151.875 -150.46875 -149.0625 -147.65625 -146.25 -144.84375 -143.4375 -142.03125 -140.625 -139.21875 -137.8125 -136.40625 -135.0 -133.59375 -132.1875 -130.78125 -129.375 -127.96875 -126.5625 -125.15625 -123.75 -122.34375 -120.9375 -119.53125 -118.125 -116.71875 -115.3125 -113.90625 -112.5 -1 [...]
+-180.703125 -179.296875 -179.296875 -177.890625 -177.890625 -176.484375 -176.484375 -175.078125 -175.078125 -173.671875 -173.671875 -172.265625 -172.265625 -170.859375 -170.859375 -169.453125 -169.453125 -168.046875 -168.046875 -166.640625 -166.640625 -165.234375 -165.234375 -163.828125 -163.828125 -162.421875 -162.421875 -161.015625 -161.015625 -159.609375 -159.609375 -158.203125 -158.203125 -156.796875 -156.796875 -155.390625 -155.390625 -153.984375 -153.984375 -152.578125 -152.578125  [...]
+time
+days since 0000-1-1
+682565.5 682595.0 682624.5
+682550.0 682581.0 682581.0 682609.0 682609.0 682640.0
+latitude
+degrees_north
+-88.9277353523 -87.538705213 -86.1414721015 -84.7423855907 -83.3425960441 -81.9424662992 -80.5421464346 -79.1417096486 -77.7411958655 -76.3406287024 -74.9400230196 -73.5393886338 -72.1387322892 -70.7380587725 -69.337371575 -67.9366733026 -66.5359659402 -65.135251026 -63.7345297708 -62.3338031405 -60.9330719152 -59.5323367318 -58.1315981156 -56.7308565037 -55.3301122627 -53.9293657026 -52.5286170871 -51.1278666424 -49.7271145631 -48.3263610182 -46.9256061547 -45.5248501013 -44.1240929714  [...]
+-90.0 -88.2332202827 -88.2332202827 -86.8400886573 -86.8400886573 -85.4419288461 -85.4419288461 -84.0424908174 -84.0424908174 -82.6425311716 -82.6425311716 -81.2423063669 -81.2423063669 -79.8419280416 -79.8419280416 -78.4414527571 -78.4414527571 -77.0409122839 -77.0409122839 -75.640325861 -75.640325861 -74.2397058267 -74.2397058267 -72.8390604615 -72.8390604615 -71.4383955308 -71.4383955308 -70.0377151737 -70.0377151737 -68.6370224388 -68.6370224388 -67.2363196214 -67.2363196214 -65.8356 [...]
+246.618438721 249.43963623 254.053329468 259.268554688 263.412414551 265.8097229 266.670593262 267.246765137 268.651824951 269.128448486 269.342498779 269.956451416 271.081512451 271.672485352 271.856781006 271.848175049 272.066101074 272.884338379 274.031982422 274.973571777 275.570831299 276.138458252 276.851898193 277.663452148 278.512756348 279.381744385 280.321411133 281.276824951 282.345001221 283.823913574 285.464874268 287.10949707 288.687194824 290.135742188 291.49710083 292.241 [...]
diff --git a/Test/tas_3d_r.asc b/Test/tas_3d_r.asc
new file mode 100644
index 0000000..3915113
--- /dev/null
+++ b/Test/tas_3d_r.asc
@@ -0,0 +1,17 @@
+3
+144
+3
+17
+longitude
+degrees_east
+0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 27.5 30.0 32.5 35.0 37.5 40.0 42.5 45.0 47.5 50.0 52.5 55.0 57.5 60.0 62.5 65.0 67.5 70.0 72.5 75.0 77.5 80.0 82.5 85.0 87.5 90.0 92.5 95.0 97.5 100.0 102.5 105.0 107.5 110.0 112.5 115.0 117.5 120.0 122.5 125.0 127.5 130.0 132.5 135.0 137.5 140.0 142.5 145.0 147.5 150.0 152.5 155.0 157.5 160.0 162.5 165.0 167.5 170.0 172.5 175.0 177.5 180.0 182.5 185.0 187.5 190.0 192.5 195.0 197.5 200.0 202.5 205.0 207.5 210.0 212.5 215.0 217.5 220.0 22 [...]
+-1.25 1.25 1.25 3.75 3.75 6.25 6.25 8.75 8.75 11.25 11.25 13.75 13.75 16.25 16.25 18.75 18.75 21.25 21.25 23.75 23.75 26.25 26.25 28.75 28.75 31.25 31.25 33.75 33.75 36.25 36.25 38.75 38.75 41.25 41.25 43.75 43.75 46.25 46.25 48.75 48.75 51.25 51.25 53.75 53.75 56.25 56.25 58.75 58.75 61.25 61.25 63.75 63.75 66.25 66.25 68.75 68.75 71.25 71.25 73.75 73.75 76.25 76.25 78.75 78.75 81.25 81.25 83.75 83.75 86.25 86.25 88.75 88.75 91.25 91.25 93.75 93.75 96.25 96.25 98.75 98.75 101.25 101.25  [...]
+time
+months since 1949-1-1 0:0
+0.0 1.0 2.0
+-0.5 0.5 0.5 1.5 1.5 2.5
+latitude
+degrees_north
+-20.0 -17.5 -15.0 -12.5 -10.0 -7.5 -5.0 -2.5 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0
+-21.25 -18.75 -18.75 -16.25 -16.25 -13.75 -13.75 -11.25 -11.25 -8.75 -8.75 -6.25 -6.25 -3.75 -3.75 -1.25 -1.25 1.25 1.25 3.75 3.75 6.25 6.25 8.75 8.75 11.25 11.25 13.75 13.75 16.25 16.25 18.75 18.75 21.25
+295.741546631 295.649749756 295.751312256 296.046234131 296.723968506 297.813812256 298.468109131 299.218109131 299.934906006 300.446624756 300.069671631 299.315765381 299.210296631 299.138031006 296.938812256 293.616546631 289.309906006 296.815185547 296.821044922 297.028076172 297.455810547 298.162841797 299.080810547 299.453857422 300.006591797 300.590576172 301.028076172 300.477294922 300.123779297 300.576904297 300.793701172 299.297607422 296.684326172 293.114013672 296.684997559 29 [...]
\ No newline at end of file
diff --git a/Test/tas_harvardf.txt b/Test/tas_harvardf.txt
new file mode 100644
index 0000000..980ce6a
--- /dev/null
+++ b/Test/tas_harvardf.txt
@@ -0,0 +1,4385 @@
+tas = {
+268.08,
+270.55,
+272.72,
+274.43,
+275.78,
+274.43,
+273.32,
+269.05,
+269.82,
+271.83,
+268.68,
+266.67,
+275.17,
+278.37,
+263.9,
+259.73,
+261.21,
+263.44,
+260.04,
+261.51,
+264.78,
+265.7,
+274.08,
+272.7,
+264.65,
+259.85,
+264.09,
+268.61,
+269.31,
+270.14,
+272.08,
+271.27,
+265.97,
+266.02,
+268.77,
+265.11,
+264.15,
+268.0,
+269.51,
+262.48,
+261.05,
+269.91,
+259.67,
+264.91,
+270.34,
+270.77,
+275.05,
+274.14,
+275.25,
+276.37,
+274.07,
+271.86,
+271.65,
+275.1,
+271.11,
+271.19,
+273.06,
+272.31,
+271.98,
+263.1,
+267.64,
+268.68,
+270.52,
+272.26,
+275.48,
+274.66,
+275.96,
+277.83,
+278.55,
+278.92,
+278.67,
+267.25,
+265.83,
+265.68,
+264.92,
+266.75,
+268.49,
+270.66,
+272.83,
+267.78,
+270.66,
+269.94,
+269.94,
+268.49,
+272.23,
+278.11,
+278.1,
+274.23,
+274.43,
+276.49,
+274.93,
+275.87,
+274.28,
+273.01,
+274.02,
+275.32,
+277.71,
+280.08,
+280.54,
+278.05,
+282.56,
+273.82,
+275.37,
+272.06,
+274.56,
+274.74,
+273.4,
+273.4,
+274.4,
+277.24,
+281.42,
+286.16,
+285.11,
+284.65,
+280.04,
+276.95,
+276.76,
+278.4,
+278.7,
+280.15,
+282.21,
+283.66,
+286.39,
+285.22,
+282.14,
+279.11,
+279.49,
+280.04,
+280.72,
+285.75,
+286.5,
+284.28,
+285.6,
+288.45,
+288.35,
+286.8,
+286.57,
+286.34,
+287.22,
+286.0,
+287.22,
+290.63,
+294.87,
+292.5,
+283.03,
+278.97,
+280.35,
+281.81,
+283.16,
+285.58,
+287.04,
+285.0,
+282.45,
+286.29,
+288.55,
+290.31,
+285.45,
+288.37,
+293.18,
+293.35,
+290.02,
+288.06,
+287.49,
+290.45,
+292.84,
+293.53,
+290.23,
+287.77,
+289.91,
+290.32,
+291.03,
+291.79,
+290.61,
+286.05,
+285.18,
+285.48,
+286.76,
+288.88,
+290.06,
+289.45,
+291.25,
+290.61,
+292.88,
+289.73,
+289.73,
+288.48,
+288.48,
+290.35,
+289.73,
+291.01,
+292.23,
+293.65,
+294.2,
+294.02,
+296.63,
+293.85,
+291.58,
+292.53,
+291.63,
+291.63,
+292.88,
+295.01,
+295.45,
+290.68,
+288.56,
+291.1,
+292.17,
+293.23,
+295.28,
+291.42,
+292.54,
+291.51,
+290.51,
+291.47,
+293.28,
+295.45,
+294.47,
+290.3,
+291.6,
+293.36,
+293.14,
+291.77,
+292.76,
+292.0,
+292.0,
+290.44,
+290.35,
+288.2,
+289.18,
+291.22,
+293.59,
+293.09,
+288.33,
+289.5,
+293.03,
+296.07,
+295.74,
+297.42,
+299.28,
+295.45,
+296.65,
+293.6,
+291.87,
+292.55,
+286.99,
+285.9,
+286.15,
+290.71,
+292.35,
+289.85,
+292.38,
+295.72,
+297.94,
+297.92,
+290.7,
+285.07,
+285.89,
+288.39,
+290.88,
+294.2,
+296.37,
+296.8,
+290.93,
+286.0,
+289.0,
+295.16,
+284.77,
+280.08,
+283.0,
+286.66,
+291.65,
+287.88,
+284.19,
+276.76,
+275.56,
+284.02,
+289.96,
+283.64,
+278.65,
+279.27,
+282.48,
+284.95,
+289.58,
+289.83,
+287.22,
+285.5,
+281.29,
+280.49,
+284.89,
+285.75,
+279.21,
+277.35,
+276.77,
+277.11,
+279.15,
+278.44,
+280.23,
+282.7,
+278.09,
+278.2,
+278.98,
+276.99,
+279.69,
+279.65,
+276.22,
+273.92,
+273.7,
+277.57,
+282.34,
+280.94,
+276.09,
+273.33,
+270.12,
+269.24,
+271.94,
+279.16,
+277.13,
+281.4,
+275.43,
+273.7,
+271.11,
+271.98,
+271.98,
+270.26,
+269.37,
+279.26,
+287.31,
+287.04,
+277.02,
+278.99,
+282.19,
+278.54,
+274.87,
+274.97,
+276.18,
+274.15,
+273.67,
+273.67,
+272.68,
+270.7,
+269.06,
+272.55,
+267.27,
+265.79,
+267.36,
+273.71,
+271.48,
+272.77,
+270.56,
+269.76,
+273.65,
+275.4,
+273.04,
+271.89,
+276.46,
+268.15,
+270.05,
+271.3,
+265.77,
+265.55,
+267.2,
+262.7,
+269.9,
+275.77,
+273.28,
+275.23,
+270.08,
+265.48,
+268.29,
+278.75,
+280.95,
+271.45,
+271.41,
+272.63,
+265.31,
+262.67,
+265.74,
+268.66,
+270.23,
+266.57,
+267.57,
+268.58,
+268.57,
+264.55,
+263.22,
+267.64,
+269.39,
+275.13,
+271.83,
+273.43,
+272.56,
+266.81,
+269.83,
+267.95,
+268.3,
+262.8,
+262.98,
+261.86,
+260.94,
+268.87,
+267.34,
+266.94,
+267.27,
+257.6,
+268.8,
+263.93,
+272.29,
+270.89,
+265.86,
+270.45,
+268.23,
+267.38,
+269.73,
+269.4,
+264.46,
+262.5,
+262.98,
+263.93,
+266.81,
+267.68,
+262.73,
+260.41,
+263.21,
+264.48,
+266.19,
+267.89,
+269.29,
+272.01,
+271.57,
+268.49,
+269.2,
+272.29,
+274.26,
+273.3,
+271.63,
+270.56,
+265.53,
+266.03,
+266.73,
+264.56,
+271.02,
+275.07,
+262.29,
+265.85,
+270.75,
+272.88,
+274.03,
+273.22,
+273.71,
+274.86,
+280.21,
+279.79,
+279.63,
+279.54,
+278.55,
+280.22,
+273.46,
+274.8,
+274.63,
+274.63,
+276.53,
+276.09,
+276.22,
+278.95,
+280.56,
+281.28,
+281.1,
+275.93,
+277.74,
+278.93,
+279.92,
+283.04,
+282.95,
+277.24,
+280.79,
+285.24,
+286.31,
+286.31,
+277.42,
+278.74,
+283.93,
+284.68,
+277.96,
+279.6,
+283.89,
+284.68,
+283.96,
+287.42,
+286.2,
+287.15,
+289.17,
+289.37,
+285.13,
+286.74,
+290.7,
+286.54,
+290.1,
+291.1,
+285.45,
+283.71,
+285.15,
+285.69,
+282.53,
+282.72,
+281.33,
+282.6,
+283.56,
+283.87,
+284.3,
+286.7,
+291.48,
+284.62,
+283.36,
+284.45,
+286.84,
+285.88,
+283.99,
+283.83,
+283.67,
+285.65,
+284.72,
+283.1,
+282.1,
+285.1,
+288.88,
+290.39,
+293.13,
+289.38,
+289.85,
+290.9,
+292.76,
+291.16,
+288.53,
+289.37,
+293.8,
+293.64,
+289.24,
+291.6,
+291.1,
+288.6,
+289.36,
+292.14,
+293.75,
+291.13,
+293.53,
+290.82,
+291.56,
+291.33,
+287.74,
+290.74,
+294.08,
+293.72,
+295.07,
+296.75,
+296.94,
+296.05,
+296.05,
+294.78,
+293.53,
+292.88,
+293.45,
+293.45,
+289.77,
+288.71,
+291.62,
+289.88,
+290.73,
+290.34,
+289.18,
+289.22,
+289.97,
+290.76,
+289.03,
+289.18,
+293.92,
+293.33,
+290.1,
+289.63,
+291.92,
+293.8,
+293.8,
+292.6,
+290.32,
+288.52,
+289.72,
+290.82,
+292.11,
+291.95,
+290.85,
+292.0,
+291.02,
+292.0,
+292.6,
+293.2,
+293.2,
+291.4,
+291.22,
+292.05,
+291.4,
+289.97,
+288.42,
+290.79,
+291.92,
+291.6,
+292.05,
+294.4,
+291.01,
+289.08,
+291.77,
+290.05,
+289.86,
+292.22,
+293.33,
+290.03,
+290.78,
+290.27,
+288.38,
+288.43,
+289.21,
+285.65,
+284.18,
+289.32,
+293.74,
+292.22,
+284.72,
+284.32,
+285.84,
+281.95,
+278.59,
+280.72,
+283.82,
+285.65,
+282.58,
+283.08,
+287.4,
+290.46,
+286.64,
+284.18,
+282.73,
+279.94,
+286.5,
+280.95,
+284.59,
+278.23,
+279.4,
+285.84,
+288.8,
+287.26,
+275.31,
+274.24,
+275.97,
+276.41,
+276.06,
+280.63,
+283.62,
+285.33,
+284.73,
+279.3,
+278.94,
+281.89,
+279.6,
+276.99,
+281.52,
+281.67,
+277.58,
+279.28,
+277.82,
+279.4,
+278.04,
+275.56,
+275.14,
+273.16,
+274.91,
+277.15,
+282.32,
+280.01,
+273.02,
+271.16,
+273.19,
+274.22,
+276.58,
+277.38,
+274.16,
+285.66,
+287.25,
+278.0,
+277.67,
+275.54,
+274.62,
+275.25,
+272.83,
+274.53,
+277.13,
+276.89,
+265.78,
+270.57,
+276.46,
+284.17,
+274.13,
+272.12,
+269.19,
+271.77,
+276.57,
+274.47,
+276.0,
+274.94,
+275.35,
+272.47,
+271.64,
+278.79,
+275.1,
+266.4,
+271.85,
+275.25,
+276.18,
+275.95,
+271.43,
+272.08,
+271.95,
+271.76,
+274.32,
+275.95,
+269.93,
+266.75,
+267.8,
+261.58,
+256.52,
+258.76,
+259.7,
+263.17,
+262.96,
+269.99,
+272.6,
+265.67,
+265.48,
+262.9,
+258.84,
+261.59,
+263.84,
+261.78,
+258.19,
+261.89,
+265.46,
+267.08,
+270.54,
+256.9,
+251.76,
+265.76,
+262.94,
+252.58,
+253.63,
+256.48,
+261.22,
+258.38,
+271.05,
+267.96,
+258.08,
+257.21,
+275.46,
+272.97,
+265.12,
+261.98,
+259.68,
+259.43,
+261.25,
+263.33,
+271.11,
+269.26,
+266.66,
+258.24,
+259.08,
+256.45,
+260.56,
+266.88,
+269.08,
+265.41,
+264.02,
+267.78,
+267.87,
+272.86,
+276.46,
+280.4,
+277.61,
+272.98,
+265.35,
+268.24,
+265.18,
+262.68,
+260.07,
+262.11,
+265.07,
+266.18,
+269.94,
+270.66,
+272.46,
+271.31,
+274.37,
+276.0,
+272.83,
+272.1,
+272.27,
+269.7,
+274.89,
+274.75,
+276.04,
+273.07,
+268.14,
+269.13,
+270.85,
+272.0,
+274.41,
+274.29,
+278.95,
+279.27,
+276.46,
+275.45,
+274.93,
+274.93,
+275.67,
+272.27,
+274.88,
+277.12,
+277.14,
+280.27,
+276.97,
+276.95,
+280.68,
+277.3,
+274.57,
+278.35,
+280.87,
+278.34,
+278.01,
+280.26,
+281.48,
+287.11,
+283.61,
+278.08,
+278.14,
+283.99,
+278.9,
+276.58,
+276.34,
+279.11,
+288.3,
+280.76,
+278.85,
+286.95,
+284.3,
+282.18,
+287.68,
+284.04,
+280.24,
+281.03,
+284.24,
+281.46,
+279.89,
+284.51,
+281.87,
+286.75,
+284.68,
+284.15,
+283.22,
+279.27,
+283.87,
+286.24,
+281.56,
+281.09,
+282.07,
+280.88,
+282.59,
+286.86,
+291.97,
+291.12,
+289.58,
+288.76,
+288.78,
+280.5,
+283.09,
+286.97,
+290.92,
+291.81,
+288.48,
+281.75,
+286.4,
+288.89,
+290.11,
+289.79,
+291.97,
+288.15,
+288.58,
+288.76,
+288.55,
+289.62,
+294.22,
+293.79,
+294.7,
+294.86,
+296.56,
+298.07,
+296.76,
+293.31,
+290.42,
+291.34,
+291.99,
+288.01,
+290.95,
+293.75,
+294.49,
+293.34,
+291.99,
+293.48,
+293.15,
+294.85,
+293.22,
+290.63,
+291.63,
+295.77,
+296.72,
+296.06,
+296.05,
+294.32,
+291.01,
+292.02,
+295.11,
+293.12,
+288.96,
+293.61,
+293.29,
+291.9,
+294.6,
+295.62,
+297.33,
+297.53,
+294.0,
+294.66,
+295.12,
+293.75,
+293.52,
+292.73,
+293.03,
+294.83,
+294.11,
+294.35,
+295.18,
+295.15,
+295.7,
+290.85,
+286.41,
+288.3,
+290.0,
+292.15,
+291.34,
+288.2,
+291.5,
+293.7,
+292.3,
+285.5,
+287.82,
+290.22,
+291.48,
+291.18,
+293.03,
+292.77,
+288.45,
+286.54,
+287.57,
+290.28,
+292.65,
+293.13,
+293.58,
+289.05,
+286.42,
+287.16,
+288.9,
+284.2,
+284.5,
+284.32,
+284.81,
+285.29,
+286.63,
+287.1,
+288.19,
+287.88,
+286.78,
+287.6,
+291.31,
+290.9,
+286.89,
+287.76,
+293.08,
+285.45,
+283.31,
+286.13,
+289.02,
+285.0,
+285.75,
+287.66,
+288.81,
+286.94,
+286.59,
+287.66,
+283.81,
+282.02,
+278.97,
+279.63,
+278.63,
+279.75,
+278.81,
+278.78,
+282.45,
+285.79,
+287.96,
+280.76,
+277.09,
+277.83,
+280.7,
+282.82,
+280.09,
+281.23,
+281.48,
+281.65,
+284.67,
+286.17,
+285.86,
+284.24,
+283.17,
+281.66,
+281.13,
+279.31,
+277.78,
+278.21,
+282.03,
+282.65,
+284.12,
+287.34,
+279.91,
+280.66,
+287.27,
+288.27,
+284.86,
+279.32,
+281.35,
+283.8,
+276.55,
+273.81,
+275.12,
+276.23,
+280.12,
+283.32,
+277.93,
+276.3,
+280.48,
+280.19,
+274.3,
+276.94,
+278.48,
+269.6,
+267.25,
+273.0,
+270.81,
+268.72,
+276.13,
+274.59,
+273.1,
+270.73,
+275.3,
+277.21,
+278.87,
+278.87,
+280.06,
+275.97,
+269.93,
+269.99,
+272.48,
+272.35,
+263.1,
+264.8,
+269.6,
+268.34,
+268.1,
+272.51,
+274.15,
+271.81,
+268.79,
+273.83,
+273.86,
+276.82,
+276.64,
+275.24,
+274.43,
+273.05,
+274.94,
+268.54,
+262.34,
+268.66,
+274.81,
+270.8,
+266.8,
+265.54,
+262.38,
+267.45,
+272.85,
+267.61,
+266.66,
+262.98,
+261.84,
+269.18,
+278.22,
+282.71,
+286.9,
+286.33,
+280.02,
+273.41,
+273.12,
+274.63,
+274.89,
+273.28,
+271.17,
+269.74,
+269.33,
+266.62,
+265.47,
+262.2,
+264.08,
+268.26,
+269.14,
+273.64,
+268.9,
+262.84,
+267.54,
+260.19,
+255.56,
+257.1,
+259.45,
+264.35,
+268.52,
+271.84,
+260.71,
+262.14,
+262.76,
+265.97,
+274.69,
+270.27,
+272.22,
+273.81,
+273.96,
+272.9,
+269.82,
+272.8,
+272.05,
+265.56,
+261.92,
+264.09,
+272.33,
+271.86,
+268.15,
+266.32,
+269.27,
+270.61,
+273.66,
+276.74,
+283.29,
+268.62,
+266.07,
+269.47,
+273.6,
+279.38,
+276.63,
+280.56,
+280.63,
+278.63,
+276.77,
+276.13,
+277.43,
+280.98,
+276.37,
+275.53,
+272.74,
+273.3,
+276.5,
+275.86,
+275.55,
+277.33,
+275.15,
+276.07,
+273.66,
+273.37,
+275.2,
+274.62,
+265.95,
+270.39,
+275.41,
+272.42,
+277.09,
+273.91,
+277.4,
+278.37,
+282.11,
+278.25,
+276.53,
+275.48,
+277.96,
+281.86,
+282.65,
+282.47,
+280.73,
+281.98,
+278.5,
+279.5,
+281.19,
+281.5,
+284.73,
+283.21,
+281.8,
+280.31,
+279.92,
+280.82,
+283.78,
+285.75,
+286.14,
+281.6,
+278.87,
+282.19,
+282.05,
+287.2,
+283.34,
+283.55,
+283.16,
+285.4,
+281.47,
+284.66,
+282.32,
+285.77,
+283.33,
+285.05,
+289.43,
+286.32,
+288.18,
+291.23,
+287.14,
+285.88,
+285.77,
+285.64,
+287.3,
+287.79,
+291.13,
+293.14,
+291.84,
+291.04,
+287.06,
+288.74,
+291.67,
+291.05,
+289.66,
+287.07,
+288.1,
+287.87,
+287.61,
+287.15,
+287.24,
+286.32,
+288.78,
+291.15,
+293.86,
+296.8,
+294.92,
+290.34,
+289.8,
+290.1,
+291.86,
+293.3,
+292.69,
+288.45,
+286.53,
+290.21,
+293.05,
+292.93,
+290.78,
+289.11,
+291.36,
+292.79,
+294.27,
+293.83,
+291.47,
+287.97,
+289.54,
+289.67,
+291.97,
+294.8,
+298.18,
+294.63,
+293.7,
+288.39,
+290.51,
+291.35,
+292.99,
+293.6,
+293.6,
+294.32,
+294.52,
+290.35,
+293.75,
+295.67,
+295.04,
+293.06,
+293.82,
+293.47,
+295.96,
+295.07,
+292.18,
+293.92,
+293.2,
+290.26,
+288.48,
+289.86,
+291.5,
+292.58,
+294.65,
+294.3,
+292.35,
+292.43,
+293.5,
+295.82,
+296.43,
+294.77,
+289.74,
+287.65,
+292.58,
+292.91,
+289.94,
+291.19,
+286.8,
+288.14,
+287.55,
+288.74,
+288.7,
+289.42,
+290.75,
+292.65,
+289.79,
+288.22,
+288.58,
+290.73,
+291.44,
+293.6,
+285.3,
+285.85,
+284.9,
+283.78,
+287.73,
+290.46,
+291.15,
+283.65,
+283.44,
+286.05,
+285.34,
+284.0,
+283.87,
+287.05,
+290.01,
+281.8,
+280.99,
+282.85,
+284.63,
+286.51,
+283.43,
+280.96,
+281.16,
+281.83,
+286.01,
+286.68,
+289.27,
+287.11,
+283.35,
+283.15,
+284.3,
+281.61,
+282.6,
+285.51,
+286.81,
+289.34,
+289.27,
+283.65,
+280.16,
+277.32,
+282.75,
+284.99,
+284.54,
+289.52,
+280.38,
+283.16,
+286.59,
+281.11,
+278.09,
+281.83,
+287.12,
+278.83,
+275.82,
+275.15,
+276.5,
+280.07,
+281.97,
+274.64,
+272.55,
+273.45,
+276.45,
+275.72,
+269.63,
+272.6,
+284.67,
+276.5,
+270.62,
+273.15,
+277.12,
+272.75,
+271.1,
+271.18,
+273.88,
+274.32,
+275.62,
+273.02,
+272.2,
+270.97,
+269.68,
+273.01,
+275.2,
+278.52,
+269.55,
+266.31,
+272.61,
+270.89,
+271.03,
+274.47,
+270.65,
+271.33,
+267.52,
+265.75,
+268.46,
+266.31,
+265.23,
+264.15,
+259.96,
+265.69,
+269.55,
+270.43,
+270.13,
+267.59,
+264.15,
+265.71,
+263.81,
+269.03,
+270.38,
+269.28,
+267.58,
+268.66,
+267.59,
+268.7,
+268.33,
+271.81,
+272.43,
+269.59,
+268.36,
+263.22,
+259.01,
+259.55,
+257.52,
+258.52,
+261.53,
+261.74,
+265.48,
+260.21,
+265.37,
+270.42,
+272.03,
+267.86,
+263.74,
+276.71,
+277.78,
+282.12,
+265.99,
+265.7,
+270.46,
+272.91,
+277.92,
+267.6,
+266.62,
+277.32,
+266.98,
+265.16,
+271.14,
+264.51,
+259.58,
+264.55,
+259.74,
+255.02,
+256.48,
+258.43,
+265.18,
+272.08,
+274.55,
+272.4,
+274.15,
+264.89,
+256.96,
+263.08,
+265.17,
+263.97,
+265.35,
+262.64,
+263.13,
+275.49,
+279.25,
+277.03,
+276.29,
+276.33,
+277.07,
+275.43,
+273.62,
+275.92,
+266.92,
+265.8,
+267.93,
+267.71,
+264.17,
+269.28,
+270.34,
+270.83,
+269.2,
+264.2,
+263.48,
+268.49,
+273.48,
+275.57,
+278.47,
+276.92,
+271.71,
+272.41,
+274.39,
+276.22,
+275.35,
+274.48,
+272.68,
+270.0,
+272.88,
+280.93,
+279.45,
+270.0,
+271.01,
+274.14,
+275.05,
+276.31,
+279.7,
+276.0,
+274.92,
+275.42,
+276.98,
+275.75,
+273.51,
+272.98,
+273.31,
+272.59,
+277.8,
+279.73,
+276.67,
+273.79,
+277.24,
+276.27,
+275.1,
+278.91,
+284.81,
+287.58,
+288.88,
+287.47,
+291.65,
+279.72,
+283.36,
+288.53,
+279.97,
+278.94,
+276.76,
+282.62,
+284.71,
+283.24,
+280.87,
+282.37,
+284.88,
+276.5,
+282.03,
+284.69,
+286.02,
+284.21,
+286.78,
+278.45,
+277.78,
+279.35,
+284.17,
+281.16,
+284.13,
+286.06,
+292.42,
+296.93,
+292.63,
+288.76,
+288.74,
+286.55,
+282.9,
+284.34,
+285.92,
+285.85,
+283.44,
+279.83,
+286.14,
+288.88,
+289.35,
+285.8,
+289.68,
+289.92,
+288.96,
+291.51,
+291.96,
+289.6,
+290.39,
+294.02,
+293.99,
+292.6,
+291.89,
+292.94,
+291.56,
+292.7,
+290.61,
+287.84,
+288.31,
+290.76,
+287.85,
+289.96,
+289.2,
+290.07,
+287.2,
+287.99,
+288.9,
+288.06,
+288.22,
+292.1,
+292.07,
+291.11,
+289.58,
+290.38,
+292.25,
+291.78,
+293.5,
+292.9,
+288.62,
+289.29,
+291.0,
+290.12,
+293.75,
+294.22,
+293.06,
+292.88,
+292.94,
+292.47,
+288.58,
+290.35,
+290.37,
+288.67,
+290.77,
+291.55,
+291.05,
+290.48,
+289.95,
+289.58,
+288.86,
+287.98,
+288.92,
+291.7,
+291.42,
+291.82,
+293.73,
+293.9,
+295.03,
+294.37,
+292.9,
+292.26,
+289.45,
+289.42,
+287.38,
+290.97,
+291.53,
+290.58,
+292.38,
+292.3,
+290.99,
+291.85,
+292.73,
+292.98,
+293.51,
+292.11,
+291.35,
+292.75,
+290.73,
+288.98,
+289.82,
+288.39,
+288.91,
+290.75,
+292.7,
+293.29,
+292.82,
+293.27,
+293.95,
+289.7,
+286.66,
+290.12,
+290.9,
+289.71,
+288.26,
+285.84,
+286.51,
+286.33,
+287.37,
+284.33,
+284.5,
+285.46,
+285.05,
+287.08,
+288.58,
+283.98,
+281.12,
+283.45,
+282.73,
+284.31,
+289.2,
+285.5,
+283.24,
+284.1,
+285.95,
+281.63,
+275.76,
+275.88,
+277.77,
+282.48,
+283.7,
+282.42,
+281.78,
+276.52,
+276.53,
+280.11,
+283.15,
+278.61,
+283.93,
+285.67,
+279.3,
+280.02,
+281.37,
+281.38,
+281.13,
+281.97,
+283.15,
+281.9,
+281.12,
+283.35,
+283.77,
+279.02,
+279.59,
+278.83,
+275.23,
+273.27,
+272.43,
+275.36,
+279.84,
+279.06,
+283.1,
+289.5,
+283.7,
+275.65,
+272.43,
+270.98,
+268.33,
+267.43,
+267.06,
+269.36,
+274.3,
+276.03,
+274.73,
+272.75,
+272.02,
+271.89,
+274.21,
+271.77,
+272.38,
+273.74,
+266.6,
+265.95,
+267.27,
+271.04,
+280.83,
+278.05,
+272.01,
+273.36,
+272.87,
+271.94,
+271.53,
+272.15,
+270.28,
+269.16,
+272.27,
+274.16,
+273.12,
+273.86,
+273.79,
+274.15,
+278.44,
+277.67,
+275.2,
+266.31,
+266.49,
+270.06,
+272.83,
+279.75,
+268.95,
+268.72,
+272.37,
+273.43,
+279.25,
+272.84,
+261.15,
+258.62,
+265.48,
+271.83,
+275.02,
+273.43,
+273.28,
+268.63,
+266.17,
+266.65,
+270.83,
+265.99,
+264.14,
+266.3,
+265.5,
+268.96,
+273.33,
+262.61,
+257.5,
+258.42,
+264.61,
+267.2,
+274.5,
+274.07,
+264.25,
+274.98,
+266.39,
+263.06,
+270.7,
+263.25,
+261.92,
+268.43,
+273.2,
+272.4,
+272.72,
+269.16,
+273.3,
+272.62,
+269.35,
+268.2,
+267.25,
+267.91,
+268.49,
+269.62,
+265.61,
+269.32,
+272.33,
+267.7,
+265.4,
+273.61,
+279.77,
+273.35,
+276.71,
+281.59,
+270.09,
+270.32,
+263.75,
+274.98,
+280.12,
+275.05,
+274.11,
+277.19,
+272.65,
+271.8,
+275.84,
+272.34,
+269.39,
+268.8,
+266.81,
+270.62,
+271.91,
+269.0,
+264.98,
+265.93,
+270.03,
+264.66,
+266.96,
+273.43,
+270.9,
+271.96,
+271.55,
+273.86,
+266.87,
+268.17,
+272.47,
+276.49,
+277.11,
+280.32,
+279.28,
+279.57,
+273.63,
+272.0,
+274.42,
+276.51,
+279.37,
+278.67,
+279.3,
+285.44,
+276.75,
+269.05,
+271.25,
+274.1,
+277.25,
+279.18,
+276.53,
+275.95,
+280.47,
+280.33,
+276.9,
+276.22,
+277.9,
+280.0,
+280.72,
+281.22,
+280.53,
+277.25,
+280.01,
+283.3,
+278.33,
+281.06,
+285.53,
+285.56,
+281.48,
+281.28,
+280.38,
+280.63,
+281.38,
+277.84,
+279.16,
+279.13,
+279.28,
+281.63,
+287.43,
+284.28,
+284.95,
+285.81,
+286.15,
+281.05,
+282.87,
+282.03,
+283.65,
+280.15,
+282.59,
+282.72,
+283.98,
+285.27,
+283.58,
+283.23,
+284.37,
+288.22,
+287.1,
+290.59,
+290.51,
+283.89,
+283.7,
+284.21,
+285.0,
+284.96,
+285.82,
+286.46,
+290.03,
+292.11,
+295.3,
+293.8,
+291.55,
+289.16,
+286.38,
+287.23,
+289.11,
+289.67,
+291.26,
+291.86,
+295.85,
+295.48,
+291.15,
+288.95,
+293.78,
+293.09,
+290.89,
+292.2,
+294.13,
+294.06,
+293.07,
+291.6,
+291.81,
+290.81,
+288.52,
+290.13,
+291.12,
+292.14,
+293.47,
+289.26,
+291.13,
+292.94,
+293.44,
+296.42,
+292.72,
+293.08,
+295.1,
+294.42,
+288.35,
+288.16,
+288.27,
+290.53,
+289.46,
+286.77,
+289.1,
+291.23,
+293.8,
+294.24,
+289.92,
+289.27,
+291.78,
+292.38,
+293.84,
+293.52,
+289.45,
+288.0,
+288.43,
+288.17,
+289.33,
+292.32,
+294.23,
+294.0,
+290.52,
+290.63,
+289.98,
+289.29,
+295.75,
+294.71,
+288.07,
+287.82,
+288.18,
+286.53,
+288.83,
+288.07,
+287.57,
+289.05,
+289.67,
+291.58,
+290.07,
+289.75,
+289.94,
+291.2,
+291.42,
+292.98,
+286.33,
+282.55,
+286.03,
+288.22,
+289.98,
+288.4,
+288.39,
+288.35,
+289.12,
+292.27,
+289.71,
+289.98,
+289.37,
+289.55,
+286.69,
+290.7,
+290.03,
+288.34,
+282.8,
+281.79,
+283.85,
+279.03,
+281.8,
+284.91,
+281.62,
+282.42,
+285.3,
+286.25,
+279.83,
+277.53,
+279.28,
+280.36,
+284.48,
+286.69,
+285.47,
+283.64,
+287.31,
+289.9,
+282.12,
+280.77,
+284.21,
+285.88,
+283.84,
+280.59,
+278.02,
+278.36,
+277.95,
+281.51,
+277.96,
+275.04,
+273.6,
+277.55,
+276.77,
+275.41,
+278.0,
+276.45,
+276.22,
+277.81,
+280.15,
+284.35,
+286.43,
+281.15,
+280.14,
+276.39,
+276.37,
+278.22,
+277.6,
+277.95,
+277.37,
+274.09,
+270.91,
+270.46,
+269.17,
+271.03,
+269.76,
+270.12,
+270.14,
+269.53,
+270.95,
+275.5,
+273.33,
+270.65,
+270.65,
+269.08,
+274.73,
+272.47,
+270.65,
+272.34,
+272.29,
+271.16,
+269.88,
+270.93,
+273.84,
+273.92,
+272.15,
+272.15,
+272.15,
+270.93,
+270.89,
+268.38,
+270.03,
+269.93,
+269.93,
+268.1,
+271.01,
+273.84,
+270.49,
+274.4,
+272.94,
+266.5,
+268.38,
+270.46,
+269.75,
+272.77,
+273.98,
+272.43,
+268.35,
+270.19,
+272.66,
+268.86,
+261.63,
+271.8,
+278.67,
+279.01,
+273.35,
+277.87,
+273.47,
+273.7,
+272.84,
+273.17,
+272.28,
+267.41,
+273.07,
+265.55,
+265.02,
+268.9,
+269.54,
+268.23,
+270.32,
+270.78,
+268.47,
+264.77,
+267.82,
+272.98,
+270.93,
+267.3,
+264.21,
+269.45,
+272.9,
+272.23,
+271.53,
+270.15,
+272.45,
+274.3,
+272.46,
+271.31,
+271.15,
+269.72,
+269.06,
+269.1,
+272.26,
+275.38,
+278.33,
+272.29,
+264.34,
+260.92,
+264.04,
+270.23,
+273.83,
+273.92,
+274.86,
+274.51,
+273.67,
+272.42,
+273.77,
+273.7,
+274.64,
+275.42,
+277.45,
+275.46,
+275.13,
+274.41,
+274.25,
+272.83,
+272.37,
+274.16,
+273.19,
+279.36,
+279.0,
+266.87,
+262.34,
+265.12,
+270.44,
+270.57,
+269.77,
+270.42,
+272.51,
+273.03,
+272.95,
+269.36,
+269.33,
+270.17,
+270.96,
+272.95,
+277.57,
+284.89,
+289.3,
+286.58,
+287.67,
+292.92,
+278.8,
+277.65,
+277.25,
+274.75,
+274.34,
+277.53,
+279.19,
+280.48,
+279.27,
+277.24,
+277.41,
+279.21,
+281.38,
+282.15,
+280.89,
+284.51,
+285.86,
+280.65,
+280.64,
+278.5,
+280.38,
+283.21,
+279.3,
+280.65,
+279.63,
+276.28,
+276.58,
+278.79,
+283.91,
+288.24,
+287.53,
+285.9,
+285.58,
+286.45,
+287.65,
+285.84,
+287.15,
+287.17,
+284.44,
+283.06,
+281.43,
+281.9,
+281.53,
+286.27,
+291.08,
+291.45,
+285.85,
+289.83,
+289.46,
+289.12,
+288.1,
+283.69,
+285.92,
+287.91,
+286.97,
+287.82,
+288.28,
+291.47,
+292.67,
+291.12,
+289.21,
+286.18,
+285.43,
+283.3,
+281.84,
+284.58,
+284.6,
+283.94,
+283.31,
+285.98,
+289.1,
+287.13,
+286.72,
+289.41,
+289.24,
+290.35,
+289.8,
+291.08,
+291.41,
+291.95,
+291.85,
+292.53,
+292.58,
+291.4,
+294.68,
+294.93,
+294.91,
+291.17,
+290.24,
+289.82,
+291.6,
+289.51,
+289.74,
+291.7,
+292.16,
+290.53,
+290.15,
+290.96,
+288.71,
+289.93,
+290.55,
+288.26,
+289.91,
+292.71,
+294.63,
+295.95,
+296.43,
+295.84,
+292.93,
+292.41,
+294.34,
+295.0,
+296.04,
+294.74,
+290.83,
+289.17,
+289.8,
+291.84,
+294.45,
+293.44,
+290.73,
+289.75,
+289.7,
+290.26,
+292.55,
+293.27,
+293.41,
+293.3,
+292.65,
+292.96,
+294.06,
+294.96,
+294.04,
+289.57,
+287.94,
+291.93,
+292.85,
+294.55,
+292.8,
+292.59,
+287.15,
+288.1,
+289.9,
+291.51,
+292.92,
+295.09,
+295.45,
+294.67,
+293.69,
+294.07,
+293.43,
+292.65,
+290.19,
+289.63,
+289.5,
+289.54,
+290.73,
+288.6,
+293.58,
+290.8,
+287.33,
+283.4,
+284.43,
+286.73,
+291.1,
+290.07,
+290.27,
+293.74,
+291.6,
+287.32,
+287.73,
+289.91,
+292.85,
+293.49,
+290.11,
+281.45,
+280.73,
+285.96,
+290.15,
+293.2,
+288.63,
+283.61,
+287.18,
+286.72,
+281.01,
+280.48,
+280.41,
+281.82,
+277.97,
+280.73,
+288.46,
+284.48,
+279.71,
+283.8,
+284.48,
+282.04,
+282.25,
+279.71,
+280.93,
+281.56,
+288.43,
+286.31,
+281.7,
+278.93,
+276.4,
+278.57,
+284.2,
+285.96,
+278.78,
+277.54,
+282.26,
+278.87,
+279.22,
+281.45,
+278.83,
+277.51,
+274.26,
+271.64,
+273.07,
+273.17,
+273.9,
+273.87,
+271.7,
+273.35,
+281.21,
+278.17,
+275.74,
+275.33,
+279.43,
+276.51,
+274.76,
+273.06,
+273.29,
+279.99,
+275.23,
+273.65,
+279.0,
+278.75,
+272.8,
+275.56,
+276.16,
+276.29,
+275.35,
+278.37,
+279.51,
+277.17,
+281.33,
+284.04,
+277.56,
+281.94,
+284.5,
+275.97,
+272.79,
+271.85,
+272.51,
+270.14,
+272.15,
+270.99,
+272.94,
+271.56,
+273.67,
+268.41,
+273.24,
+275.53,
+273.78,
+272.15,
+266.05,
+266.44,
+266.62,
+267.81,
+268.66,
+273.78,
+271.96,
+271.42,
+263.52,
+260.2,
+255.79,
+268.94,
+269.46,
+264.66,
+263.05,
+262.59,
+262.08,
+273.93,
+263.13,
+262.96,
+269.2,
+269.26,
+258.98,
+262.25,
+270.23,
+267.88,
+272.63,
+273.82,
+271.38,
+271.28,
+274.51,
+274.57,
+280.57,
+272.18,
+270.36,
+271.22,
+267.77,
+265.17,
+263.27,
+262.73,
+268.04,
+273.83,
+275.4,
+273.45,
+272.64,
+269.49,
+271.48,
+269.4,
+270.5,
+273.8,
+273.23,
+279.2,
+271.27,
+265.98,
+267.98,
+273.25,
+273.46,
+274.17,
+272.33,
+271.16,
+269.0,
+261.33,
+262.23,
+264.72,
+268.09,
+271.78,
+271.63,
+272.52,
+277.04,
+272.92,
+276.25,
+273.31,
+270.11,
+269.33,
+265.53,
+267.48,
+267.59,
+268.26,
+269.18,
+269.17,
+272.95,
+273.65,
+271.99,
+273.08,
+278.77,
+279.23,
+274.71,
+273.72,
+274.6,
+277.13,
+275.85,
+276.27,
+275.55,
+274.29,
+277.91,
+276.63,
+282.12,
+279.46,
+282.18,
+284.24,
+281.9,
+280.13,
+278.77,
+277.96,
+281.7,
+282.79,
+284.61,
+278.79,
+278.12,
+277.17,
+279.06,
+277.98,
+279.88,
+281.28,
+278.26,
+278.71,
+281.19,
+281.39,
+279.52,
+282.89,
+281.6,
+279.88,
+277.8,
+279.93,
+283.61,
+280.52,
+278.69,
+282.0,
+283.64,
+285.62,
+286.74,
+285.6,
+285.88,
+284.64,
+287.4,
+289.2,
+287.8,
+287.94,
+285.68,
+284.27,
+285.35,
+283.89,
+285.09,
+286.78,
+287.01,
+287.65,
+288.91,
+289.55,
+287.03,
+287.83,
+290.56,
+286.57,
+286.85,
+286.31,
+283.34,
+283.34,
+286.82,
+291.6,
+293.03,
+294.88,
+294.91,
+295.09,
+293.94,
+289.62,
+289.52,
+291.44,
+296.91,
+296.63,
+287.3,
+287.53,
+287.85,
+291.55,
+292.57,
+292.88,
+290.71,
+287.05,
+286.46,
+286.77,
+288.8,
+290.94,
+289.76,
+292.85,
+294.68,
+295.2,
+292.48,
+294.47,
+296.64,
+297.47,
+296.3,
+291.93,
+292.67,
+294.87,
+294.69,
+296.01,
+298.73,
+297.95,
+293.27,
+291.53,
+289.98,
+292.94,
+288.82,
+290.32,
+289.87,
+291.17,
+293.65,
+296.44,
+298.18,
+297.28,
+293.25,
+292.48,
+291.88,
+295.92,
+296.7,
+296.55,
+296.55,
+294.46,
+295.06,
+294.9,
+294.54,
+297.03,
+298.11,
+298.75,
+294.53,
+292.57,
+293.89,
+293.23,
+293.1,
+290.37,
+291.82,
+289.57,
+288.71,
+290.15,
+294.22,
+295.4,
+294.83,
+290.17,
+291.32,
+295.88,
+293.8,
+291.3,
+290.28,
+286.56,
+287.46,
+290.63,
+292.0,
+293.0,
+291.72,
+292.82,
+294.14,
+291.91,
+288.35,
+288.91,
+290.45,
+292.57,
+294.11,
+294.61,
+294.61,
+294.17,
+294.98,
+294.68,
+295.5,
+292.81,
+289.83,
+287.78,
+288.93,
+289.71,
+290.72,
+288.25,
+284.76,
+285.37,
+285.05,
+287.32,
+287.97,
+282.88,
+284.8,
+288.44,
+287.64,
+284.46,
+286.76,
+290.27,
+291.32,
+288.17,
+285.12,
+285.16,
+288.36,
+280.7,
+279.35,
+280.2,
+275.82,
+279.46,
+287.39,
+286.8,
+286.03,
+280.82,
+286.42,
+281.92,
+278.23,
+286.11,
+290.55,
+284.86,
+277.62,
+278.32,
+278.73,
+280.79,
+281.05,
+279.8,
+276.68,
+281.93,
+279.18,
+277.74,
+281.76,
+283.42,
+288.38,
+283.08,
+286.79,
+285.31,
+276.23,
+279.58,
+281.93,
+274.83,
+271.76,
+279.12,
+285.98,
+273.82,
+271.56,
+272.83,
+277.13,
+275.36,
+271.33,
+271.47,
+272.82,
+278.49,
+284.41,
+279.91,
+284.67,
+285.19,
+287.11,
+280.8,
+281.53,
+281.75,
+275.72,
+272.46,
+269.75,
+266.07,
+270.56,
+273.59,
+274.43,
+275.95,
+279.72,
+277.26,
+272.6,
+273.27,
+276.88,
+272.34,
+272.06,
+273.02,
+274.02,
+274.51,
+275.85,
+272.49,
+271.38,
+269.13,
+269.93,
+273.1,
+269.88,
+267.92,
+264.25,
+261.03,
+267.78,
+266.16,
+263.07,
+266.48,
+273.83,
+269.27,
+270.57,
+277.19,
+281.81,
+278.7,
+268.82,
+267.15,
+271.42,
+269.12,
+272.76,
+274.64,
+274.95,
+271.3,
+264.67,
+256.81,
+258.25,
+263.86,
+259.27,
+256.55,
+258.23,
+261.28,
+259.6,
+256.29,
+257.15,
+266.34,
+267.26,
+265.5,
+258.68,
+257.56,
+259.85,
+266.26,
+272.89,
+267.97,
+262.47,
+262.77,
+265.37,
+266.5,
+266.27,
+268.33,
+262.18,
+269.22,
+272.8,
+271.31,
+269.01,
+267.5,
+274.51,
+269.63,
+270.15,
+264.67,
+264.43,
+267.97,
+269.19,
+269.18,
+272.16,
+275.52,
+280.12,
+275.87,
+272.94,
+277.89,
+276.73,
+272.99,
+273.85,
+272.85,
+271.01,
+272.56,
+274.13,
+273.06,
+278.01,
+280.62,
+282.73,
+275.41,
+272.0,
+272.31,
+270.12,
+274.28,
+279.41,
+282.89,
+269.11,
+266.34,
+270.33,
+271.95,
+273.04,
+275.4,
+281.31,
+281.83,
+281.78,
+280.86,
+279.34,
+279.87,
+277.54,
+276.24,
+275.92,
+279.84,
+283.63,
+281.62,
+282.56,
+274.24,
+276.69,
+281.6,
+286.61,
+275.2,
+273.88,
+273.37,
+273.92,
+274.69,
+278.31,
+285.55,
+285.97,
+276.49,
+274.79,
+275.98,
+281.01,
+277.24,
+276.14,
+276.49,
+277.49,
+277.76,
+272.97,
+275.75,
+277.91,
+283.02,
+281.08,
+282.54,
+282.3,
+284.25,
+285.68,
+289.35,
+290.29,
+294.69,
+294.69,
+293.0,
+279.32,
+283.54,
+286.21,
+285.25,
+285.05,
+281.43,
+283.22,
+285.86,
+287.7,
+283.31,
+281.17,
+282.11,
+282.22,
+283.95,
+286.03,
+287.04,
+285.29,
+286.39,
+284.39,
+283.25,
+284.28,
+286.3,
+292.11,
+291.72,
+287.51,
+286.91,
+283.9,
+281.32,
+283.12,
+287.26,
+291.45,
+295.07,
+290.95,
+285.16,
+283.15,
+283.48,
+287.69,
+295.22,
+293.9,
+290.09,
+289.08,
+289.65,
+291.85,
+293.27,
+290.88,
+290.15,
+292.45,
+293.92,
+293.89,
+291.25,
+290.93,
+289.82,
+290.44,
+293.27,
+292.67,
+293.32,
+291.58,
+288.06,
+288.25,
+288.06,
+289.61,
+293.12,
+290.87,
+291.38,
+291.95,
+292.9,
+291.72,
+292.62,
+290.88,
+292.53,
+287.85,
+288.35,
+289.85,
+289.81,
+288.63,
+290.38,
+290.6,
+288.77,
+288.08,
+290.62,
+291.25,
+291.6,
+289.28,
+289.92,
+293.17,
+294.7,
+291.52,
+289.97,
+289.8,
+294.95,
+294.06,
+294.1,
+292.61,
+291.95,
+289.74,
+289.43,
+288.83,
+291.05,
+290.36,
+286.48,
+286.61,
+289.65,
+289.07,
+287.88,
+289.07,
+289.25,
+289.67,
+290.46,
+290.76,
+290.97,
+292.6,
+289.77,
+289.64,
+290.78,
+294.81,
+291.25,
+291.9,
+290.77,
+283.29,
+283.78,
+285.55,
+289.15,
+290.53,
+289.46,
+290.09,
+292.41,
+290.27,
+287.77,
+286.9,
+283.02,
+283.82,
+287.01,
+289.9,
+291.56,
+288.94,
+283.68,
+285.46,
+288.01,
+281.33,
+280.4,
+282.31,
+280.39,
+277.14,
+281.42,
+284.76,
+285.65,
+287.24,
+284.64,
+282.66,
+283.3,
+280.3,
+276.33,
+275.03,
+274.94,
+280.68,
+281.65,
+283.15,
+284.48,
+287.23,
+285.17,
+279.25,
+281.2,
+280.65,
+280.42,
+285.43,
+279.29,
+277.66,
+282.31,
+283.98,
+285.89,
+285.29,
+278.58,
+271.21,
+274.0,
+277.18,
+277.8,
+278.74,
+280.56,
+282.27,
+283.13,
+276.22,
+278.66,
+279.23,
+280.5,
+280.1,
+280.12,
+277.8,
+277.56,
+279.05,
+274.54,
+276.88,
+277.34,
+272.84,
+272.0,
+271.57,
+271.24,
+269.12,
+266.83,
+264.81,
+267.68,
+271.98,
+276.58,
+276.6,
+274.69,
+273.28,
+270.88,
+266.36,
+265.65,
+268.23,
+271.92,
+265.23,
+265.5,
+263.43,
+262.82,
+264.0,
+271.43,
+271.03,
+264.83,
+270.04,
+266.55,
+270.47,
+281.82,
+270.78,
+269.11,
+267.79,
+265.6,
+268.6,
+263.97,
+266.67,
+261.35,
+261.01,
+265.85,
+262.28,
+264.66,
+267.26,
+266.78,
+265.57,
+262.69,
+263.69,
+265.52,
+266.62,
+269.95,
+268.28,
+270.08,
+268.22,
+261.49,
+268.45,
+265.6,
+265.6,
+270.56,
+270.48,
+271.58,
+271.8,
+266.72,
+271.58,
+268.57,
+263.88,
+263.5,
+265.62,
+269.07,
+269.51,
+265.97,
+269.21,
+267.49,
+266.0,
+272.24,
+274.4,
+272.89,
+270.2,
+267.46,
+264.84,
+268.69,
+271.18,
+272.08,
+269.93,
+273.83,
+275.97,
+261.95,
+262.77,
+270.07,
+271.31,
+272.49,
+269.6,
+268.61,
+262.21,
+267.47,
+275.48,
+269.49,
+261.24,
+265.22,
+268.87,
+268.07,
+272.08,
+270.55,
+265.07,
+263.75,
+264.36,
+268.18,
+267.21,
+268.41,
+270.35,
+270.6,
+271.2,
+271.59,
+271.83,
+271.66,
+270.5,
+272.15,
+273.3,
+275.72,
+274.78,
+274.91,
+275.67,
+273.52,
+275.57,
+274.36,
+274.66,
+273.72,
+274.67,
+270.97,
+268.59,
+268.09,
+271.11,
+272.98,
+274.56,
+269.94,
+274.23,
+274.63,
+274.25,
+275.33,
+276.44,
+276.37,
+276.5,
+273.76,
+280.33,
+278.67,
+278.53,
+276.58,
+279.19,
+278.29,
+278.14,
+278.27,
+278.08,
+276.2,
+274.55,
+280.43,
+284.24,
+289.7,
+289.03,
+289.72,
+280.0,
+280.55,
+279.59,
+282.51,
+277.88,
+280.53,
+288.48,
+293.54,
+294.64,
+294.04,
+286.01,
+281.4,
+281.74,
+284.08,
+287.68,
+289.47,
+291.94,
+290.53,
+283.1,
+283.6,
+282.37,
+280.92,
+283.65,
+282.95,
+287.75,
+286.09,
+286.23,
+282.65,
+283.44,
+283.64,
+284.52,
+285.94,
+285.84,
+286.5,
+284.87,
+280.44,
+281.68,
+284.82,
+286.16,
+285.72,
+284.97,
+286.94,
+287.92,
+288.85,
+289.97,
+289.64,
+290.15,
+287.69,
+289.08,
+292.48,
+294.98,
+296.14,
+295.43,
+292.54,
+292.16,
+294.08,
+293.91,
+287.75,
+289.94,
+291.25,
+292.15,
+293.28,
+295.43,
+295.18,
+294.25,
+290.7,
+294.34,
+292.15,
+285.47,
+286.92,
+291.97,
+291.53,
+286.64,
+288.68,
+289.56,
+293.18,
+292.42,
+290.87,
+287.84,
+289.25,
+289.12,
+289.55,
+290.14,
+289.77,
+290.63,
+289.68,
+290.58,
+292.6,
+292.84,
+294.84,
+296.97,
+294.78,
+290.26,
+286.67,
+287.57,
+290.2,
+289.96,
+290.47,
+292.64,
+294.77,
+295.05,
+292.84,
+294.36,
+296.13,
+297.59,
+298.23,
+299.23,
+296.94,
+292.52,
+289.67,
+291.79,
+291.33,
+291.48,
+292.12,
+292.9,
+292.47,
+293.7,
+292.83,
+293.5,
+292.78,
+292.35,
+291.92,
+288.9,
+290.24,
+292.9,
+292.65,
+290.42,
+290.3,
+293.0,
+293.71,
+287.08,
+287.88,
+289.36,
+286.94,
+286.24,
+290.84,
+292.97,
+293.86,
+293.44,
+289.15,
+287.41,
+289.4,
+284.77,
+283.34,
+285.95,
+288.15,
+289.17,
+288.88,
+289.11,
+290.43,
+290.73,
+288.15,
+289.55,
+291.37,
+284.8,
+284.92,
+282.97,
+282.49,
+281.43,
+281.55,
+284.56,
+287.57,
+290.38,
+289.78,
+284.78,
+277.0,
+274.95,
+277.94,
+283.41,
+286.53,
+287.51,
+285.39,
+284.12,
+284.38,
+283.11,
+280.83,
+277.57,
+279.15,
+281.96,
+286.08,
+284.2,
+282.9,
+290.0,
+288.76,
+279.81,
+276.87,
+274.49,
+275.6,
+276.44,
+275.0,
+283.76,
+287.36,
+286.4,
+280.56,
+277.33,
+275.87,
+277.02,
+277.5,
+276.6,
+274.02,
+273.31,
+270.11,
+271.43,
+276.77,
+280.2,
+283.48,
+272.59,
+277.31,
+280.6,
+276.45,
+271.65,
+274.37,
+275.3,
+278.45,
+284.36,
+283.03,
+279.52,
+280.78,
+274.27,
+284.97,
+285.38,
+276.77,
+275.65,
+277.38,
+282.78,
+285.3,
+277.42,
+271.86,
+269.75,
+269.27,
+272.92,
+273.25,
+274.88,
+278.22,
+272.91,
+269.08,
+270.11,
+271.43,
+272.15,
+273.67,
+272.93,
+268.42,
+269.13,
+272.93,
+272.15,
+271.43,
+269.13,
+267.63,
+267.63,
+269.13,
+268.42,
+266.31,
+267.53,
+268.93,
+268.07,
+271.44,
+273.24,
+270.17,
+266.07,
+270.06,
+276.01,
+274.05,
+273.32,
+270.43,
+269.93,
+271.71,
+271.59,
+271.18,
+268.82,
+266.29,
+268.32,
+269.98,
+272.75,
+276.35,
+276.48,
+272.6,
+276.18,
+278.77,
+279.92,
+281.67,
+276.18,
+269.1,
+271.33,
+266.2,
+268.35,
+270.86,
+264.81,
+268.42,
+272.21,
+274.1,
+269.76,
+272.7,
+269.25,
+267.4,
+268.17,
+266.46,
+273.36,
+277.25,
+273.33,
+268.23,
+272.94,
+278.66,
+281.6,
+274.81,
+271.9,
+272.35,
+275.87,
+280.0,
+273.84,
+267.58,
+270.72,
+273.59,
+280.47,
+268.89,
+265.85,
+273.1,
+277.27,
+275.8,
+282.35,
+274.45,
+268.95,
+272.87,
+275.41,
+280.02,
+276.57,
+276.81,
+271.65,
+271.07,
+271.78,
+271.77,
+273.91,
+264.53,
+269.67,
+273.07,
+272.58,
+272.23,
+274.53,
+275.28,
+278.22,
+281.89,
+282.44,
+277.55,
+277.57,
+281.49,
+273.2,
+271.79,
+271.67,
+271.99,
+277.93,
+286.29,
+282.51,
+279.7,
+282.13,
+287.89,
+287.49,
+287.09,
+294.01,
+295.84,
+292.85,
+289.04,
+284.15,
+277.46,
+273.55,
+274.24,
+279.08,
+277.15,
+274.86,
+277.21,
+276.66,
+273.87,
+276.41,
+278.02,
+278.21,
+279.11,
+282.38,
+285.97,
+288.12,
+288.81,
+286.24,
+282.18,
+286.95,
+283.05,
+280.28,
+278.15,
+278.42,
+279.51,
+287.24,
+287.18,
+275.26,
+277.23,
+277.55,
+278.94,
+282.73,
+286.75,
+289.15,
+284.3,
+284.34,
+289.83,
+290.65,
+291.25,
+291.91,
+291.53,
+291.55,
+287.33,
+284.26,
+285.78,
+289.02,
+288.04,
+283.56,
+285.34,
+288.22,
+288.63,
+291.81,
+283.28,
+284.87,
+285.43,
+282.4,
+282.96,
+286.86,
+287.34,
+288.84,
+290.82,
+292.2,
+290.51,
+292.63,
+293.06,
+291.73,
+295.17,
+294.02,
+291.99,
+292.73,
+293.63,
+295.12,
+297.15,
+298.0,
+298.2,
+291.91,
+291.28,
+290.47,
+293.94,
+293.5,
+289.92,
+286.49,
+289.02,
+291.86,
+292.54,
+292.88,
+289.77,
+291.86,
+295.79,
+292.58,
+291.63,
+293.21,
+295.29,
+294.52,
+288.56,
+288.28,
+287.62,
+289.35,
+291.57,
+296.36,
+296.63,
+295.94,
+296.19,
+291.83,
+294.29,
+295.64,
+295.8,
+288.41,
+288.85,
+289.43,
+290.93,
+292.54,
+294.64,
+296.11,
+297.34,
+297.55,
+296.31,
+296.15,
+295.28,
+296.72,
+294.35,
+291.26,
+291.4,
+291.33,
+290.1,
+285.61,
+289.53,
+291.06,
+291.75,
+287.5,
+285.36,
+289.21,
+287.38,
+284.58,
+286.99,
+290.59,
+292.31,
+288.22,
+286.87,
+289.48,
+291.88,
+294.57,
+294.82,
+289.05,
+284.37,
+288.28,
+291.62,
+292.29,
+291.09,
+287.94,
+288.23,
+289.23,
+291.51,
+292.82,
+293.43,
+289.84,
+286.87,
+286.19,
+284.62,
+286.04,
+287.65,
+282.1,
+286.49,
+289.92,
+292.32,
+288.09,
+283.68,
+289.99,
+282.36,
+282.93,
+279.25,
+279.88,
+283.49,
+283.51,
+283.55,
+283.95,
+277.71,
+276.21,
+280.54,
+280.72,
+277.71,
+280.68,
+278.63,
+276.11,
+275.13,
+273.53,
+273.75,
+274.77,
+277.44,
+278.53,
+275.67,
+273.57,
+273.29,
+273.14,
+274.77,
+270.19,
+270.55,
+273.68,
+273.93,
+274.94,
+271.5,
+277.22,
+281.65,
+286.75,
+287.95,
+278.96,
+275.25,
+277.15,
+280.67,
+271.71,
+272.16,
+272.25,
+271.7,
+275.12,
+275.31,
+277.0,
+273.12,
+274.77,
+274.6,
+273.15,
+268.77,
+264.02,
+268.94,
+273.94,
+269.21,
+269.61,
+262.35,
+262.88,
+265.72,
+266.73,
+266.75,
+269.53,
+261.11,
+266.55,
+270.53,
+273.36,
+273.27,
+275.63,
+273.7,
+271.05,
+265.15,
+266.01,
+270.92,
+279.13,
+273.33,
+274.6,
+273.25,
+271.0,
+269.0,
+267.85,
+265.93,
+267.59,
+269.44,
+266.69,
+273.71,
+273.78,
+267.3,
+266.82,
+269.3,
+266.78,
+266.08,
+265.3,
+267.95,
+272.25,
+267.67,
+264.4,
+266.15,
+265.24,
+260.31,
+259.95,
+262.86,
+263.77,
+256.55,
+259.61,
+262.84,
+257.73,
+256.0,
+255.31,
+259.31,
+262.44,
+265.71,
+259.14,
+256.61,
+264.75,
+264.37,
+270.41,
+271.76,
+273.08,
+272.94,
+273.57,
+267.76,
+264.55,
+266.91,
+262.48,
+265.37,
+267.79,
+261.98,
+262.13,
+258.19,
+257.95,
+256.14,
+255.8,
+261.96,
+266.85,
+270.2,
+272.88,
+273.5,
+273.63,
+272.09,
+267.29,
+263.3,
+258.86,
+263.04,
+266.1,
+270.13,
+273.2,
+260.46,
+262.7,
+274.6,
+266.36,
+262.77,
+272.41,
+271.43,
+261.57,
+265.85,
+273.88,
+270.8,
+264.16,
+271.41,
+277.57,
+279.82,
+278.85,
+272.14,
+272.33,
+279.32,
+279.3,
+275.94,
+277.54,
+279.21,
+278.85,
+277.09,
+280.19,
+283.66,
+275.13,
+270.55,
+270.32,
+274.27,
+274.07,
+270.19,
+270.54,
+270.35,
+269.41,
+270.71,
+271.88,
+276.12,
+274.36,
+280.19,
+278.02,
+279.43,
+288.87,
+286.6,
+273.36,
+275.18,
+279.85,
+282.28,
+284.4,
+280.4,
+277.29,
+275.74,
+280.0,
+280.54,
+282.04,
+288.12,
+288.11,
+283.8,
+285.28,
+286.23,
+281.41,
+282.93,
+284.31,
+280.89,
+287.12,
+280.58,
+283.64,
+284.47,
+284.13,
+280.03,
+281.26,
+282.32,
+283.23,
+279.43,
+280.16,
+284.5,
+289.66,
+291.91,
+284.04,
+282.76,
+281.15,
+280.27,
+283.22,
+281.32,
+284.61,
+285.55,
+286.61,
+288.14,
+285.78,
+284.73,
+284.9,
+287.09,
+286.82,
+283.67,
+288.69,
+286.67,
+287.28,
+287.57,
+289.39,
+290.09,
+291.37,
+286.38,
+288.18,
+290.29,
+286.31,
+286.97,
+286.8,
+289.98,
+288.62,
+287.18,
+286.47,
+291.6,
+294.21,
+295.63,
+297.1,
+296.01,
+292.03,
+292.63,
+292.37,
+291.06,
+292.67,
+293.39,
+295.16,
+295.92,
+295.7,
+294.97,
+295.85,
+289.74,
+290.01,
+288.56,
+291.79,
+290.42,
+290.6,
+292.37,
+291.03,
+290.86,
+291.31,
+291.49,
+291.14,
+292.02,
+292.5,
+293.23,
+293.18,
+292.27,
+293.42,
+294.39,
+291.72,
+291.54,
+292.81,
+292.14,
+288.41,
+292.53,
+295.7,
+294.91,
+294.6,
+293.73,
+294.0,
+293.41,
+295.14,
+295.15,
+295.08,
+294.63,
+294.62,
+294.17,
+294.9,
+294.1,
+291.94,
+290.97,
+292.26,
+292.66,
+293.99,
+294.68,
+290.43,
+286.12,
+289.3,
+291.82,
+293.06,
+288.13,
+290.1,
+291.33,
+285.98,
+287.15,
+286.6,
+287.39,
+289.69,
+289.17,
+287.85,
+289.19,
+288.78,
+285.12,
+286.27,
+289.79,
+286.41,
+288.77,
+292.25,
+292.45,
+290.15,
+287.5,
+287.68,
+291.24,
+292.07,
+287.48,
+287.04,
+288.05,
+285.11,
+288.64,
+285.78,
+289.17,
+288.73,
+283.33,
+281.21,
+279.97,
+278.67,
+277.13,
+279.65,
+277.71,
+277.35,
+279.03,
+284.32,
+287.53,
+284.04,
+286.04,
+284.2,
+284.39,
+283.43,
+283.33,
+279.79,
+278.28,
+276.88,
+274.84,
+276.01,
+284.52,
+274.51,
+272.23,
+273.06,
+277.54,
+285.12,
+286.7,
+279.93,
+281.29,
+278.42,
+283.18,
+286.58,
+282.5,
+285.97,
+278.2,
+277.17,
+280.87,
+278.44,
+272.27,
+268.95,
+271.23,
+273.25,
+279.06,
+278.35,
+271.14,
+270.41,
+272.05,
+274.62,
+277.45,
+282.86,
+279.8,
+278.74,
+278.85,
+277.26,
+277.53,
+273.05,
+272.63,
+276.9,
+280.37,
+276.13,
+274.17,
+274.05,
+266.6,
+263.13,
+266.44,
+265.66,
+265.45,
+265.52,
+267.97,
+268.39,
+273.12,
+277.55,
+271.51,
+266.09,
+264.82,
+269.31,
+269.7,
+278.45,
+271.02,
+269.29,
+268.5,
+266.73,
+272.93,
+277.69,
+281.09,
+275.39,
+272.29,
+273.17,
+273.33,
+277.25,
+276.35,
+274.25}
+
diff --git a/Test/tas_mytest_3d_i.asc b/Test/tas_mytest_3d_i.asc
new file mode 100644
index 0000000..58414bf
--- /dev/null
+++ b/Test/tas_mytest_3d_i.asc
@@ -0,0 +1,19 @@
+tas
+K
+3
+256
+128
+3
+longitude
+degrees_east
+-180.0 -178.59375 -177.1875 -175.78125 -174.375 -172.96875 -171.5625 -170.15625 -168.75 -167.34375 -165.9375 -164.53125 -163.125 -161.71875 -160.3125 -158.90625 -157.5 -156.09375 -154.6875 -153.28125 -151.875 -150.46875 -149.0625 -147.65625 -146.25 -144.84375 -143.4375 -142.03125 -140.625 -139.21875 -137.8125 -136.40625 -135.0 -133.59375 -132.1875 -130.78125 -129.375 -127.96875 -126.5625 -125.15625 -123.75 -122.34375 -120.9375 -119.53125 -118.125 -116.71875 -115.3125 -113.90625 -112.5 -1 [...]
+-180.703125 -179.296875 -179.296875 -177.890625 -177.890625 -176.484375 -176.484375 -175.078125 -175.078125 -173.671875 -173.671875 -172.265625 -172.265625 -170.859375 -170.859375 -169.453125 -169.453125 -168.046875 -168.046875 -166.640625 -166.640625 -165.234375 -165.234375 -163.828125 -163.828125 -162.421875 -162.421875 -161.015625 -161.015625 -159.609375 -159.609375 -158.203125 -158.203125 -156.796875 -156.796875 -155.390625 -155.390625 -153.984375 -153.984375 -152.578125 -152.578125  [...]
+latitude
+degrees_north
+-88.9277353523 -87.538705213 -86.1414721015 -84.7423855907 -83.3425960441 -81.9424662992 -80.5421464346 -79.1417096486 -77.7411958655 -76.3406287024 -74.9400230196 -73.5393886338 -72.1387322892 -70.7380587725 -69.337371575 -67.9366733026 -66.5359659402 -65.135251026 -63.7345297708 -62.3338031405 -60.9330719152 -59.5323367318 -58.1315981156 -56.7308565037 -55.3301122627 -53.9293657026 -52.5286170871 -51.1278666424 -49.7271145631 -48.3263610182 -46.9256061547 -45.5248501013 -44.1240929714  [...]
+-90.0 -88.2332202827 -88.2332202827 -86.8400886573 -86.8400886573 -85.4419288461 -85.4419288461 -84.0424908174 -84.0424908174 -82.6425311716 -82.6425311716 -81.2423063669 -81.2423063669 -79.8419280416 -79.8419280416 -78.4414527571 -78.4414527571 -77.0409122839 -77.0409122839 -75.640325861 -75.640325861 -74.2397058267 -74.2397058267 -72.8390604615 -72.8390604615 -71.4383955308 -71.4383955308 -70.0377151737 -70.0377151737 -68.6370224388 -68.6370224388 -67.2363196214 -67.2363196214 -65.8356 [...]
+time
+days since 0000-1-1
+682565.5 682595.0 682624.5
+682550.0 682581.0 682581.0 682609.0 682609.0 682640.0
+246 236 226 249 239 232 254 245 239 259 250 245 263 254 249 265 256 247 266 255 243 267 255 243 268 260 250 269 263 252 269 265 254 269 267 255 271 269 257 271 270 259 271 272 263 271 273 266 272 273 269 272 274 271 274 275 272 274 275 273 275 276 274 276 277 274 276 277 275 277 278 276 278 279 277 279 280 278 280 280 279 281 281 280 282 282 281 283 284 283 285 285 285 287 287 286 288 288 288 290 290 289 291 291 290 292 292 291 292 292 291 292 293 292 293 293 292 293 293 292 293 294 293  [...]
diff --git a/Test/tas_mytest_3d_i.input b/Test/tas_mytest_3d_i.input
new file mode 100644
index 0000000..b9ade75
--- /dev/null
+++ b/Test/tas_mytest_3d_i.input
@@ -0,0 +1 @@
+Test/tas_mytest_3d_i.asc
diff --git a/Test/tas_mytest_noreorder.asc b/Test/tas_mytest_noreorder.asc
new file mode 100644
index 0000000..a1fc15b
--- /dev/null
+++ b/Test/tas_mytest_noreorder.asc
@@ -0,0 +1,19 @@
+tas
+K
+3
+3
+128
+256
+time
+days since 0000-1-1
+682565.5 682595.0 682624.5
+682550.0 682581.0 682581.0 682609.0 682609.0 682640.0
+latitude
+degrees_north
+-88.9277353523 -87.538705213 -86.1414721015 -84.7423855907 -83.3425960441 -81.9424662992 -80.5421464346 -79.1417096486 -77.7411958655 -76.3406287024 -74.9400230196 -73.5393886338 -72.1387322892 -70.7380587725 -69.337371575 -67.9366733026 -66.5359659402 -65.135251026 -63.7345297708 -62.3338031405 -60.9330719152 -59.5323367318 -58.1315981156 -56.7308565037 -55.3301122627 -53.9293657026 -52.5286170871 -51.1278666424 -49.7271145631 -48.3263610182 -46.9256061547 -45.5248501013 -44.1240929714  [...]
+-90.0 -88.2332202827 -88.2332202827 -86.8400886573 -86.8400886573 -85.4419288461 -85.4419288461 -84.0424908174 -84.0424908174 -82.6425311716 -82.6425311716 -81.2423063669 -81.2423063669 -79.8419280416 -79.8419280416 -78.4414527571 -78.4414527571 -77.0409122839 -77.0409122839 -75.640325861 -75.640325861 -74.2397058267 -74.2397058267 -72.8390604615 -72.8390604615 -71.4383955308 -71.4383955308 -70.0377151737 -70.0377151737 -68.6370224388 -68.6370224388 -67.2363196214 -67.2363196214 -65.8356 [...]
+longitude
+degrees_east
+0.0 1.40625 2.8125 4.21875 5.625 7.03125 8.4375 9.84375 11.25 12.65625 14.0625 15.46875 16.875 18.28125 19.6875 21.09375 22.5 23.90625 25.3125 26.71875 28.125 29.53125 30.9375 32.34375 33.75 35.15625 36.5625 37.96875 39.375 40.78125 42.1875 43.59375 45.0 46.40625 47.8125 49.21875 50.625 52.03125 53.4375 54.84375 56.25 57.65625 59.0625 60.46875 61.875 63.28125 64.6875 66.09375 67.5 68.90625 70.3125 71.71875 73.125 74.53125 75.9375 77.34375 78.75 80.15625 81.5625 82.96875 84.375 85.78125 8 [...]
+-0.703125 0.703125 0.703125 2.109375 2.109375 3.515625 3.515625 4.921875 4.921875 6.328125 6.328125 7.734375 7.734375 9.140625 9.140625 10.546875 10.546875 11.953125 11.953125 13.359375 13.359375 14.765625 14.765625 16.171875 16.171875 17.578125 17.578125 18.984375 18.984375 20.390625 20.390625 21.796875 21.796875 23.203125 23.203125 24.609375 24.609375 26.015625 26.015625 27.421875 27.421875 28.828125 28.828125 30.234375 30.234375 31.640625 31.640625 33.046875 33.046875 34.453125 34.453 [...]
+246.145 246.104 246.062 246.023 245.991 245.963 245.931 245.9 245.868 245.843 245.81 245.778 245.744 245.722 245.694 245.661 245.637 245.606 245.577 245.556 245.531 245.505 245.477 245.452 245.416 245.39 245.373 245.349 245.315 245.289 245.26 245.228 245.203 245.187 245.15 245.134 245.115 245.094 245.077 245.056 245.054 245.039 245.024 245.008 244.998 245.007 244.981 244.955 244.937 244.931 244.957 244.918 244.913 244.974 244.917 244.87 244.928 244.949 244.945 244.939 244.958 244.949 244 [...]
diff --git a/Test/tas_mytest_reorder.asc b/Test/tas_mytest_reorder.asc
new file mode 100644
index 0000000..8d23396
--- /dev/null
+++ b/Test/tas_mytest_reorder.asc
@@ -0,0 +1,19 @@
+tas
+K
+3
+3
+256
+128
+time
+days since 0000-1-1
+682565.5 682595.0 682624.5
+682550.0 682581.0 682581.0 682609.0 682609.0 682640.0
+longitude
+degrees_east
+0.0 1.40625 2.8125 4.21875 5.625 7.03125 8.4375 9.84375 11.25 12.65625 14.0625 15.46875 16.875 18.28125 19.6875 21.09375 22.5 23.90625 25.3125 26.71875 28.125 29.53125 30.9375 32.34375 33.75 35.15625 36.5625 37.96875 39.375 40.78125 42.1875 43.59375 45.0 46.40625 47.8125 49.21875 50.625 52.03125 53.4375 54.84375 56.25 57.65625 59.0625 60.46875 61.875 63.28125 64.6875 66.09375 67.5 68.90625 70.3125 71.71875 73.125 74.53125 75.9375 77.34375 78.75 80.15625 81.5625 82.96875 84.375 85.78125 8 [...]
+-0.703125 0.703125 0.703125 2.109375 2.109375 3.515625 3.515625 4.921875 4.921875 6.328125 6.328125 7.734375 7.734375 9.140625 9.140625 10.546875 10.546875 11.953125 11.953125 13.359375 13.359375 14.765625 14.765625 16.171875 16.171875 17.578125 17.578125 18.984375 18.984375 20.390625 20.390625 21.796875 21.796875 23.203125 23.203125 24.609375 24.609375 26.015625 26.015625 27.421875 27.421875 28.828125 28.828125 30.234375 30.234375 31.640625 31.640625 33.046875 33.046875 34.453125 34.453 [...]
+latitude
+degrees_north
+-88.9277353523 -87.538705213 -86.1414721015 -84.7423855907 -83.3425960441 -81.9424662992 -80.5421464346 -79.1417096486 -77.7411958655 -76.3406287024 -74.9400230196 -73.5393886338 -72.1387322892 -70.7380587725 -69.337371575 -67.9366733026 -66.5359659402 -65.135251026 -63.7345297708 -62.3338031405 -60.9330719152 -59.5323367318 -58.1315981156 -56.7308565037 -55.3301122627 -53.9293657026 -52.5286170871 -51.1278666424 -49.7271145631 -48.3263610182 -46.9256061547 -45.5248501013 -44.1240929714  [...]
+-90.0 -88.2332202827 -88.2332202827 -86.8400886573 -86.8400886573 -85.4419288461 -85.4419288461 -84.0424908174 -84.0424908174 -82.6425311716 -82.6425311716 -81.2423063669 -81.2423063669 -79.8419280416 -79.8419280416 -78.4414527571 -78.4414527571 -77.0409122839 -77.0409122839 -75.640325861 -75.640325861 -74.2397058267 -74.2397058267 -72.8390604615 -72.8390604615 -71.4383955308 -71.4383955308 -70.0377151737 -70.0377151737 -68.6370224388 -68.6370224388 -67.2363196214 -67.2363196214 -65.8356 [...]
+246.145 247.091 247.99 249.12 250.756 251.989 252.279 252.055 251.674 251.793 252.932 256.082 261.129 267.244 270.278 271.72 271.779 271.786 272.055 272.318 272.709 273.339 273.785 273.924 274.009 274.488 275.321 276.315 277.537 278.895 280.113 281.36 282.661 283.886 285.162 286.4 287.559 288.812 289.957 290.911 291.783 292.746 293.629 294.108 294.306 294.333 294.297 294.318 294.409 294.63 295.049 295.55 296.181 297.015 297.79 298.357 298.859 299.295 299.466 299.447 299.409 299.433 299.5 [...]
diff --git a/Test/tas_mytest_reorder_split_lon.asc b/Test/tas_mytest_reorder_split_lon.asc
new file mode 100644
index 0000000..aa3c6dd
--- /dev/null
+++ b/Test/tas_mytest_reorder_split_lon.asc
@@ -0,0 +1,19 @@
+tas
+K
+3
+3
+256
+128
+time
+days since 0000-1-1
+682565.5 682595.0 682624.5
+682550.0 682581.0 682581.0 682609.0 682609.0 682640.0
+longitude
+degrees_east
+-180.0 -178.59375 -177.1875 -175.78125 -174.375 -172.96875 -171.5625 -170.15625 -168.75 -167.34375 -165.9375 -164.53125 -163.125 -161.71875 -160.3125 -158.90625 -157.5 -156.09375 -154.6875 -153.28125 -151.875 -150.46875 -149.0625 -147.65625 -146.25 -144.84375 -143.4375 -142.03125 -140.625 -139.21875 -137.8125 -136.40625 -135.0 -133.59375 -132.1875 -130.78125 -129.375 -127.96875 -126.5625 -125.15625 -123.75 -122.34375 -120.9375 -119.53125 -118.125 -116.71875 -115.3125 -113.90625 -112.5 -1 [...]
+-180.703125 -179.296875 -179.296875 -177.890625 -177.890625 -176.484375 -176.484375 -175.078125 -175.078125 -173.671875 -173.671875 -172.265625 -172.265625 -170.859375 -170.859375 -169.453125 -169.453125 -168.046875 -168.046875 -166.640625 -166.640625 -165.234375 -165.234375 -163.828125 -163.828125 -162.421875 -162.421875 -161.015625 -161.015625 -159.609375 -159.609375 -158.203125 -158.203125 -156.796875 -156.796875 -155.390625 -155.390625 -153.984375 -153.984375 -152.578125 -152.578125  [...]
+latitude
+degrees_north
+-88.9277353523 -87.538705213 -86.1414721015 -84.7423855907 -83.3425960441 -81.9424662992 -80.5421464346 -79.1417096486 -77.7411958655 -76.3406287024 -74.9400230196 -73.5393886338 -72.1387322892 -70.7380587725 -69.337371575 -67.9366733026 -66.5359659402 -65.135251026 -63.7345297708 -62.3338031405 -60.9330719152 -59.5323367318 -58.1315981156 -56.7308565037 -55.3301122627 -53.9293657026 -52.5286170871 -51.1278666424 -49.7271145631 -48.3263610182 -46.9256061547 -45.5248501013 -44.1240929714  [...]
+-90.0 -88.2332202827 -88.2332202827 -86.8400886573 -86.8400886573 -85.4419288461 -85.4419288461 -84.0424908174 -84.0424908174 -82.6425311716 -82.6425311716 -81.2423063669 -81.2423063669 -79.8419280416 -79.8419280416 -78.4414527571 -78.4414527571 -77.0409122839 -77.0409122839 -75.640325861 -75.640325861 -74.2397058267 -74.2397058267 -72.8390604615 -72.8390604615 -71.4383955308 -71.4383955308 -70.0377151737 -70.0377151737 -68.6370224388 -68.6370224388 -67.2363196214 -67.2363196214 -65.8356 [...]
+246.618 249.44 254.053 259.269 263.412 265.81 266.671 267.247 268.652 269.128 269.342 269.956 271.082 271.672 271.857 271.848 272.066 272.884 274.032 274.974 275.571 276.138 276.852 277.663 278.513 279.382 280.321 281.277 282.345 283.824 285.465 287.109 288.687 290.136 291.497 292.241 292.577 292.83 293.149 293.552 293.944 294.327 294.746 295.222 295.703 296.208 296.765 297.292 297.794 298.332 298.836 299.173 299.382 299.601 299.958 300.391 300.694 300.789 300.849 300.818 300.562 300.125 [...]
diff --git a/Test/test1.f90 b/Test/test1.f90
new file mode 100644
index 0000000..b16a804
--- /dev/null
+++ b/Test/test1.f90
@@ -0,0 +1,511 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+    
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+      plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             field(k,i,j) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          field(j,i) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '',       '' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(3) :: axis2d_ids2
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  bt=0
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="GICCM1", &
+       forcing="Nat",contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis2d_ids2(1) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids2(2) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis2d_ids2(3) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  axis3d_ids(3) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(2) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(3)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+!!$          file_suffix='1979-2001',    &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.eq.3) then
+        print*, 'ok our axes are: ',axis2d_ids2
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Lmon',  & 
+             table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids2,       &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+     else 
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Amon',  & 
+             table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids,        &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+     endif
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/test2.f90 b/Test/test2.f90
new file mode 100644
index 0000000..afc54cb
--- /dev/null
+++ b/Test/test2.f90
@@ -0,0 +1,513 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i, irev
+    
+    DO i = 1, SIZE(alons)
+       irev = SIZE(alons)+1-i
+       alons(irev) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,irev) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,irev) = (i - 0.5)*360./SIZE(alons)
+       print*, i,irev,alons(irev),bnds_lon(1,irev),bnds_lon(2,irev)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+       plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+   
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k, irev
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             irev = SIZE(field, 2) + 1 - i
+             field(k,irev,j) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j, irev
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          irev = SIZE(field, 2) + 1 - i
+          field(j,irev) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '',       '' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(3) :: axis2d_ids2
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',                           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                     &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' ,                        &
+       model_id="GICCM1",forcing="SO",contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt,institute_id="PCMDI")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis2d_ids2(1) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids2(2) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(3) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)     
+  print*, 'alons:',alons         
+  print*, 'blons:',bnds_lon         
+  axis3d_ids(2) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis2d_ids2(3) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  axis3d_ids(4) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(3)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.eq.3) then
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Lmon',  & 
+             table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids2,        &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+     else 
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/test3.f90 b/Test/test3.f90
new file mode 100644
index 0000000..fa38ae0
--- /dev/null
+++ b/Test/test3.f90
@@ -0,0 +1,517 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i, irev, ioff
+    
+    DO i = 1, SIZE(alons)
+       irev = SIZE(alons)+1-i
+       ioff = irev +2
+       if (ioff>SIZE(alons)) ioff = ioff - SIZE(alons)
+       alons(ioff) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,ioff) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,ioff) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+      plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k, irev, ioff
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             irev = SIZE(field, 2) + 1 - i
+             ioff = irev + 2
+             IF (ioff > SIZE(field,2)) ioff = ioff - SIZE(field,2)
+             field(k,ioff,j) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j, irev, ioff
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          irev = SIZE(field, 2) + 1 - i
+          ioff = irev + 2
+          IF (ioff > SIZE(field,2)) ioff = ioff - SIZE(field,2)
+         field(j,ioff) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'K    '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '    ',       '    ' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(3) :: axis2d_ids2
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  REAL, DIMENSION(lev,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  bt=0.
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' , &
+       model_id="GICCM1",forcing='TO',contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt,institute_id="PCMDI");
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis2d_ids2(1) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids2(2) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis2d_ids2(3) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  axis3d_ids(3) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(2) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)           
+  axis3d_ids(1) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='30 days')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(3)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.eq.3) then
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Lmon',  & 
+             table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids2,        &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+     else 
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  & 
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/test4.f90 b/Test/test4.f90
new file mode 100644
index 0000000..bc32fa6
--- /dev/null
+++ b/Test/test4.f90
@@ -0,0 +1,514 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/main_prog.f90 -IModules -L/work/Unidata/lib -ludunits -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/main_prog.f90 -L/pcmdi/charles_work/Unidata/lib -ludunits -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+       plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+   
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+             if (TRIM(ADJUSTL(varname)).eq.'T') field(i,j,k) = field(i,j,k)*1.8 - 459.67
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is required by many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, APE, and
+!       IPCC scenario runs)
+!
+!   Background information for this sample code:
+!
+!      Standard output requested by AMIP is listed in 6 different 
+!   tables.  This sample code processes only 2 variables listed in AMIP 
+!   Table 1a ("3-d" fields, containing monthly mean data that are a 
+!   function of longitude, latitude, pressure and time) and only 3 
+!   variables in AMIP Table 2 ("2-d" fields, containing monthly mean 
+!   data that are a function of longitude, latitude, and time).  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of AMIP Table 2 fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 2       ! number of AMIP Table 1a fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+  CHARACTER (LEN=2), DIMENSION(n3d) :: varin3d=(/ 'U', 'T'/)
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ 'm s-1',   'degF '  /)
+  CHARACTER (LEN=4), DIMENSION(n3d) ::  &
+                              positive3d= (/   '    ',       '    ' /)
+                     ! Corresponding AMIP Table 1a entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'ua', 'ta' /)
+
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ',       '    ' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(3) :: axis2d_ids2
+  INTEGER, DIMENSION(4) :: axis3d_ids
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+  character(256) outputpath
+
+  bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' , model_id="GICCM1", &
+       forcing = 'TO',contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt,institute_id="PCMDI")
+  
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining 3-d axes'
+  
+  axis2d_ids2(1) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids2(2) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis2d_ids2(3) = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  axis3d_ids(2) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis3d_ids(1) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  axis3d_ids(3) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis3d_ids(4) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='31 days')
+  
+  print*, 'finished defining 3-d axes'
+
+  !  Define axes for 2-d fields
+  
+  print*, 'defining 2-d axes'
+
+  axis2d_ids(1) = axis3d_ids(1)          
+  axis2d_ids(2) = axis3d_ids(2)           
+  axis2d_ids(3) = axis3d_ids(4)
+  
+print*, 'finished defining 2-d axes'
+
+  !  Define variables found in AMIP table 1a (3-d variables)
+  
+  DO m=1,n3d
+     var3d_ids(m) = cmor_variable(    &   
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=axis3d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive3d(m),     &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.eq.3) then
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Lmon',  & 
+             table_entry=entry2d(m),     & 
+!!$          file_suffix='1979-2001',    &
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids2,        &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+     else 
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Amon',  & 
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=axis2d_ids,        &
+             missing_value=1.0e20,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+     endif
+  ENDDO
+
+print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested AMIP table 1a and table 2 fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time, bnds_time)
+     
+     ! Cycle through the 3-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+    
+ 
+
+    DO m=1,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        call cmor_create_output_path(var3d_ids(m),outputpath)
+        print*, 'Test Code: we are dumping this varialbe ',var3d_ids(m),'to:',outputpath
+        error_flag = cmor_write(var_id =        var3d_ids(m),   &
+                                data =          RESHAPE(data3d, (/ lat*lon*lev /)),          &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+
+print*, 'after writing variable, ', var3d_ids(m)
+print*, '    error flag = ', error_flag
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 1a ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        call cmor_create_output_path(var2d_ids(m),outputpath)
+        print*, 'Test Code: we are dumping this varialbe ',var2d_ids(m),'to:',outputpath
+
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+                                data =          RESHAPE(data2d, (/ lat*lon /)),        &
+                                ntimes_passed = 1,              &
+                                time_vals =     (/ time /),           &
+                                time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+print*, 'after writing variable, ', var2d_ids(m)
+print*, '    error flag = ', error_flag
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/test_3h.f90 b/Test/test_3h.f90
new file mode 100644
index 0000000..f3e8492
--- /dev/null
+++ b/Test/test_3h.f90
@@ -0,0 +1,585 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+       plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+   
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*3
+    time_bnds(1,1) = (it-1)*3.
+    time_bnds(2,1) = it*3.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 3.2
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 3       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ','PSURF   ', 'TSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=10), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2     ', 'kg m-2 s-1', 'K         ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'pr   ',  'tas  ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, itim1
+  double precision bt
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')!,logfile='test_3h.LOG')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_3hr',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_3hr',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+!!$  ipres = cmor_axis(  &
+!!$       table='Tables/CMIP5_3hr',    &
+!!$       table_entry='pressure',       &
+!!$       units='Pa',                   &
+!!$       length=lev,                   &
+!!$       coord_vals=plevs)
+!!$
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_3hr',    &
+       table_entry='time',           &
+       units='hours since 2030-1-1',  &
+       length=ntimes,                &
+       interval='3 hours')
+
+  itim1 = cmor_axis(  &
+       table='Tables/CMIP5_3hr',    &
+       table_entry='time1',           &
+       units='hours since 2030-1-1',  &
+       length=ntimes)
+!!$  
+!!$  !  define model eta levels (although these must be provided, they will
+!!$  !    actually be replaced by a+b before writing the netCDF file)
+!!$  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+!!$  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+!!$
+!!$  ilev = cmor_axis(  &
+!!$       table='Tables/CMIP5_3hr',    &
+!!$       table_entry='standard_hybrid_sigma',       &
+!!$       length=lev,                   &
+!!$       coord_vals=zlevs,             &
+!!$       cell_bounds=zlev_bnds)
+!!$
+!!$  !   define z-factors needed to transform from model level to pressure
+!!$  p0 = 1.e5
+!!$  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+!!$  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+!!$
+!!$  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+!!$  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+!!$
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                      &
+!!$       zfactor_name='p0',                  &
+!!$       units='Pa',                         &
+!!$       zfactor_values = p0)
+!!$
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                       & 
+!!$       zfactor_name='b',                    &
+!!$       axis_ids= (/ ilev /),                &
+!!$       zfactor_values = b_coeff,            &
+!!$       zfactor_bounds = b_coeff_bnds  )
+!!$
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                       &
+!!$       zfactor_name='a',                    &
+!!$       axis_ids= (/ ilev /),                &
+!!$       zfactor_values = a_coeff,            &
+!!$       zfactor_bounds = a_coeff_bnds )
+!!$
+!!$  zfactor_id = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                         &
+!!$       zfactor_name='ps',                     &
+!!$       axis_ids=(/ ilon, ilat, itim /),       &
+!!$       units='Pa' )
+!!$
+!!$  !  Define the only field to be written that is a function of model level
+!!$  !    (appearing in IPCC table A1c)
+!!$
+!!$  var3d_ids(1) = cmor_variable(    &
+!!$       table='Tables/CMIP5_3hr',  &
+!!$       table_entry=entry3d(1),     &
+!!$       units=units3d(1),           &
+!!$       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+!!$       missing_value=1.0e28, &
+!!$       original_name=varin3d(1))
+!!$  
+!!$  !  Define variables appearing in IPCC table A1c that are a function of pressure
+!!$  !         (3-d variables)
+!!$  
+!!$  DO m=2,n3d
+!!$     var3d_ids(m) = cmor_variable(    &
+!!$          table='Tables/CMIP5_3hr',  &
+!!$          table_entry=entry3d(m),     &
+!!$          units=units3d(m),           &
+!!$          axis_ids=(/ ilon, ilat, ipres, itim /), &
+!!$          missing_value=1.0e28,       &
+!!$          original_name=varin3d(m))
+!!$  ENDDO
+!!$  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     print*, m,entry2d(m)
+     IF (m.ne.3) THEN
+        print*, 'itim axis ids: ',ilon,ilat,itim
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_3hr',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon, ilat, itim /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+
+     ELSE
+        print*, 'itim1 axis ids: ',ilon,ilat,itim1
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_3hr',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon, ilat, itim1 /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))  
+
+     END IF
+
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+!!$    call read_3d_input_files(it, varin3d(1), data3d)
+!!$
+!!$    error_flag = cmor_write(                                  &
+!!$         var_id        = var3d_ids(1),                        &
+!!$         data          = data3d,                              &
+!!$         ntimes_passed = 1,                                   &
+!!$         time_vals     = time,                                &
+!!$         time_bnds     = bnds_time   )
+!!$
+!!$    call read_2d_input_files(it, varin2d(4), data2d)                  
+!!$
+!!$    error_flag = cmor_write(                                  &
+!!$         var_id        = zfactor_id,                          &
+!!$         data          = data2d,                              &
+!!$         ntimes_passed = 1,                                   &
+!!$         time_vals     = time,                                &
+!!$         time_bnds     = bnds_time,                           &
+!!$         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+!!$    DO m=2,n3d
+!!$        
+!!$        ! The user must write the code that fills the arrays of data
+!!$        ! that will be passed to CMOR.  The following line is simply a
+!!$        ! a place-holder for the user's code, which should replace it.
+!!$
+!!$        call read_3d_input_files(it, varin3d(m), data3d)
+!!$       
+!!$        ! append a single time sample of data for a single field to 
+!!$        ! the appropriate netCDF file.
+!!$        
+!!$        error_flag = cmor_write(                                  &
+!!$             var_id        = var3d_ids(m),                        &
+!!$             data          = data3d,                              &
+!!$             ntimes_passed = 1,                                   &
+!!$             time_vals     = time,                                &
+!!$             time_bnds     = bnds_time  )
+!!$        
+!!$        IF (error_flag < 0) THEN
+!!$           ! write diagnostic messages to standard output device
+!!$           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+!!$                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+!!$           write(*,*) ' Was processing time sample: ', time
+!!$                      
+!!$        END IF
+!!$
+!!$     END DO
+!!$     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        IF (m.ne.3) THEN
+           print*, 'Passing times (1):',time
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = data2d,                              &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+        ELSE
+            print*, 'Passing times (2):',time
+          error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = data2d,                              &
+                ntimes_passed = 1,                                   &
+                time_vals     = time)
+        END IF
+
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/test_any_from_asc.f90 b/Test/test_any_from_asc.f90
new file mode 100644
index 0000000..c649158
--- /dev/null
+++ b/Test/test_any_from_asc.f90
@@ -0,0 +1,352 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current,ptimes
+  integer ndim,i,j,ntot
+!  real, allocatable, dimension(:,:,:):: arrayin
+  real, allocatable, dimension(:,:):: arrayin2d
+  real, allocatable, dimension(:,:,:):: arrayin3d
+  real, allocatable, dimension(:,:,:,:):: arrayin4d
+  real, allocatable, dimension(:,:,:,:,:):: arrayin5d
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  character(50) :: var,units
+  double precision bt
+
+  print*, 'Test Code: Welcome to the general from ascii testing code'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength,var,units)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  if (ndim.eq.2) then
+     allocate(arrayin2d(dimlength(1),dimlength(2)))
+     call read_ascii2d(23,mydims, ndim,ntot,arrayin2d)
+     print*,'Test Code: allocate data:',shape(arrayin2d)
+  else if (ndim.eq.3) then
+     allocate(arrayin3d(dimlength(1),dimlength(2),dimlength(3)))
+     call read_ascii3d(23,mydims, ndim,ntot,arrayin3d)
+     print*,'Test Code: allocate data:',shape(arrayin3d)
+  else if (ndim.eq.4) then
+     allocate(arrayin4d(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+     call read_ascii4d(23,mydims, ndim,ntot,arrayin4d)
+     print*,'Test Code: allocate data:',shape(arrayin4d)
+  else if (ndim.eq.5) then
+     call read_ascii5d(23,mydims, ndim,ntot,arrayin5d)
+     allocate(arrayin5d(dimlength(1),dimlength(2),dimlength(3),dimlength(4),dimlength(5)))
+     print*,'Test Code: allocate data:',shape(arrayin5d)
+  endif
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  bt=0.
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id='GICCM1',forcing='Nat', &
+       parent_experiment_id="N/A",branch_time=bt,&
+       contact="Freddy Krueger",institute_id="PCMDI" )
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i
+     print*, 'Test Code: Axis Name:',trim(adjustl(current%name))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        ptimes => current
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+             interval='1 month')
+     else
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+  
+  print*,'Test Code: CMOR VAR'
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       var,&
+       units,&
+       myaxis,&
+       missing_value=1.e20)
+
+  !! figures out length of dimension other than time
+
+  print*, 'Test Code: time before:',ptimes%values(i:i)
+  if (ndim.eq.2) then 
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin2d(:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin2d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.3) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin3d(:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once',ptimes%units,ptimes%values
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin3d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.4) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin4d(:,:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once',ptimes%units
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin4d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin5d(:,:,:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin5d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  endif
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength,var,units)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    character(50), intent(inout) :: var,units
+    read(file_id,'(A)') var
+    read(file_id,'(A)') units
+    read(file_id,'(I4)') ndim
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii2d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((arrayin(j,k),j=1,size(arrayin,1)),k=1,size(arrayin,2))
+  end subroutine read_ascii2d
+  subroutine read_ascii3d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+  end subroutine read_ascii3d
+  subroutine read_ascii4d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+  end subroutine read_ascii4d
+  subroutine read_ascii5d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    real, dimension(:,:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m,o
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((((arrayin(j,k,l,m,o),j=1,size(arrayin,1)),&
+         k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4)),&
+         o=1,size(arrayin,5))
+  end subroutine read_ascii5d
+
+
+end program main
+
diff --git a/Test/test_any_from_asc_d.f90 b/Test/test_any_from_asc_d.f90
new file mode 100644
index 0000000..7609260
--- /dev/null
+++ b/Test/test_any_from_asc_d.f90
@@ -0,0 +1,352 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current,ptimes
+  integer ndim,i,j,ntot
+!  double precision, allocatable, dimension(:,:,:):: arrayin
+  double precision, allocatable, dimension(:,:):: arrayin2d
+  double precision, allocatable, dimension(:,:,:):: arrayin3d
+  double precision, allocatable, dimension(:,:,:,:):: arrayin4d
+  double precision, allocatable, dimension(:,:,:,:,:):: arrayin5d
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  character(50) :: var,units
+  double precision bt
+  double precision mymissing 
+  bt=0.
+mymissing=1.e20;
+  print*, 'Test Code: Welcome to the general from ascii testing code'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength,var,units)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  if (ndim.eq.2) then
+     allocate(arrayin2d(dimlength(1),dimlength(2)))
+     call read_ascii2d(23,mydims, ndim,ntot,arrayin2d)
+     print*,'Test Code: allocate data:',shape(arrayin2d)
+  else if (ndim.eq.3) then
+     allocate(arrayin3d(dimlength(1),dimlength(2),dimlength(3)))
+     call read_ascii3d(23,mydims, ndim,ntot,arrayin3d)
+     print*,'Test Code: allocate data:',shape(arrayin3d)
+  else if (ndim.eq.4) then
+     allocate(arrayin4d(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+     call read_ascii4d(23,mydims, ndim,ntot,arrayin4d)
+     print*,'Test Code: allocate data:',shape(arrayin4d)
+  else if (ndim.eq.5) then
+     call read_ascii5d(23,mydims, ndim,ntot,arrayin5d)
+     allocate(arrayin5d(dimlength(1),dimlength(2),dimlength(3),dimlength(4),dimlength(5)))
+     print*,'Test Code: allocate data:',shape(arrayin5d)
+  endif
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)' ,   &
+       model_id = "GICCM1",forcing='TO',contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt,institute_id="PCMDI")
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i
+     print*, 'Test Code: Axis Name:',trim(adjustl(current%name))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        ptimes => current
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+             interval='1 month')
+     else
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+  
+  print*,'Test Code: CMOR VAR'
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       var,&
+       units,&
+       myaxis,&
+       missing_value=mymissing)
+
+  !! figures out length of dimension other than time
+
+  print*, 'Test Code: time before:',ptimes%values(i:i)
+  if (ndim.eq.2) then 
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin2d(:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin2d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.3) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin3d(:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin3d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.4) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin4d(:,:,:,i:i), &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin4d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin5d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin5d(:,:,:,:,i:i), &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  endif
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength,var,units)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+    character(50), intent(inout) :: var,units
+    read(file_id,'(A)') var
+    read(file_id,'(A)') units
+    read(file_id,'(I4)') ndim
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii2d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((arrayin(j,k),j=1,size(arrayin,1)),k=1,size(arrayin,2))
+  end subroutine read_ascii2d
+  subroutine read_ascii3d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+  end subroutine read_ascii3d
+  subroutine read_ascii4d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+  end subroutine read_ascii4d
+  subroutine read_ascii5d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    double precision, dimension(:,:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m,o
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((((arrayin(j,k,l,m,o),j=1,size(arrayin,1)),&
+         k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4)),&
+         o=1,size(arrayin,5))
+  end subroutine read_ascii5d
+
+
+end program main
+
diff --git a/Test/test_any_from_asc_i.f90 b/Test/test_any_from_asc_i.f90
new file mode 100644
index 0000000..c5a406b
--- /dev/null
+++ b/Test/test_any_from_asc_i.f90
@@ -0,0 +1,350 @@
+program main
+
+  USE cmor_users_functions
+  implicit none
+
+  integer ncid
+
+  type dims
+     integer n
+     character(256) name
+     character(256) units
+     double precision, DIMENSION(:), pointer :: values
+     double precision, DIMENSION(:,:), pointer :: bounds     
+     type(dims), pointer :: next
+  end type dims
+  character(256) filein
+  type(dims), pointer :: mydims,current,ptimes
+  integer ndim,i,j,ntot
+!  integer, allocatable, dimension(:,:,:):: arrayin
+  integer, allocatable, dimension(:,:):: arrayin2d
+  integer, allocatable, dimension(:,:,:):: arrayin3d
+  integer, allocatable, dimension(:,:,:,:):: arrayin4d
+  integer, allocatable, dimension(:,:,:,:,:):: arrayin5d
+  integer, dimension(7):: dimlength = (/ (1,i=1,7) /)
+  integer, PARAMETER::verbosity = 2
+  integer ierr
+  integer, allocatable, dimension(:) :: myaxis
+  integer myvar
+  character(50) :: var,units
+  double precision bt
+  bt = 0.
+  print*, 'Test Code: Welcome to the general from ascii testing code'
+  read(5,'(A)') filein
+  open(unit=23,file=filein,form='formatted') 
+  call allocate_dims(23,mydims,ndim,dimlength,var,units)
+  allocate(myaxis(ndim))
+  current=>mydims
+  ntot=1
+  do i =1,ndim
+     ntot=ntot*current%n
+     current=>current%next
+  enddo
+  if (ndim.eq.2) then
+     allocate(arrayin2d(dimlength(1),dimlength(2)))
+     call read_ascii2d(23,mydims, ndim,ntot,arrayin2d)
+     print*,'Test Code: allocate data:',shape(arrayin2d)
+  else if (ndim.eq.3) then
+     allocate(arrayin3d(dimlength(1),dimlength(2),dimlength(3)))
+     call read_ascii3d(23,mydims, ndim,ntot,arrayin3d)
+     print*,'Test Code: allocate data:',shape(arrayin3d)
+  else if (ndim.eq.4) then
+     allocate(arrayin4d(dimlength(1),dimlength(2),dimlength(3),dimlength(4)))
+     call read_ascii4d(23,mydims, ndim,ntot,arrayin4d)
+     print*,'Test Code: allocate data:',shape(arrayin4d)
+  else if (ndim.eq.5) then
+     call read_ascii5d(23,mydims, ndim,ntot,arrayin5d)
+     allocate(arrayin5d(dimlength(1),dimlength(2),dimlength(3),dimlength(4),dimlength(5)))
+     print*,'Test Code: allocate data:',shape(arrayin5d)
+  endif
+  
+  
+!!$!! Ok here is the part where we define or variable/axis,etc... 
+!!$!! Assuming that Karl's code is ok...
+!!$
+  
+  print*,'Test Code: CMOR SETUP'
+!!$  
+  ierr = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+    
+  print*,'Test Code: CMOR DATASET'
+  ierr = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='noleap',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)', &
+       model_id = "GICCM1", forcing='TO',contact="Barry Bonds",&
+       parent_experiment_id="N/A",branch_time=bt,institute_id="PCMDI")
+  
+  current=>mydims
+  do i = 0,ndim-1
+     print*,'Test Code: CMOR AXIS',i
+     print*, 'Test Code: Axis Name:',trim(adjustl(current%name))
+     if (trim(adjustl(current%name)).eq.'time') then
+        print*, 'Test Code: time found'
+        ptimes => current
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+!!$          coord_vals=current%values,&
+!!$          cell_bounds=current%bounds, &
+             interval='1 month')
+     else
+        myaxis(ndim-i)=cmor_axis('Tables/CMIP5_Amon', &
+             table_entry=current%name,&
+             units=current%units,&
+             length=current%n,&
+             coord_vals=current%values,&
+             cell_bounds=current%bounds)
+        print*, 'Test Code: not time'
+     endif
+     current=>current%next
+  enddo
+  
+  print*,'Test Code: CMOR VAR',var,units
+  myvar=cmor_variable('Tables/CMIP5_Amon',&
+       var,&
+       units,&
+       myaxis,&
+       missing_value=120)
+
+  !! figures out length of dimension other than time
+
+  print*, 'Test Code: time before:',ptimes%values(i:i)
+  if (ndim.eq.2) then 
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin2d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin2d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.3) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin3d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin3d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else if (ndim.eq.4) then
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin4d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin4d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  else
+     if (ptimes%name.eq.mydims%name) then
+        do i=1,ptimes%n
+           print*, 'Test code: Write time',i,ptimes%values(i)
+           ierr = cmor_write( &
+                var_id        = myvar, &
+                data          = arrayin5d, &
+                ntimes_passed = 1,   &
+                time_vals     = (/ptimes%values(i)/),  &
+                time_bnds     = RESHAPE (ptimes%bounds(1:2,i), (/2,1/)) &
+                )
+        enddo
+     else
+        print*, 'Test code: Write all times at once'
+        ierr = cmor_write( &
+             var_id        = myvar, &
+             data          = arrayin5d, &
+             ntimes_passed = ptimes%n,   &
+             time_vals     = ptimes%values,  &
+             time_bnds     = ptimes%bounds &
+             )
+     endif
+  endif
+  ierr = cmor_close()
+
+contains
+  subroutine allocate_dims(file_id,mydims,ndim,dimlength,var,units)
+    implicit none
+    integer i,n,j,tmp,file_id
+    integer, intent(inout)::ndim
+    integer, intent(inout):: dimlength(7)
+    type(dims) , pointer :: tmpdims,mydims
+     character(50), intent(inout) :: var,units
+    read(file_id,'(A)') var
+    read(file_id,'(A)') units
+   read(file_id,'(I4)') ndim
+    n=1
+    allocate(mydims)
+    tmpdims=>mydims
+    do i = 1, ndim
+       read(file_id,'(I4)') tmp
+       dimlength(4-i)=tmp
+       allocate(tmpdims%values(tmp))
+       allocate(tmpdims%bounds(2,tmp))
+       tmpdims%n=tmp
+       allocate(tmpdims%next)
+       tmpdims=>tmpdims%next
+       n=n*tmp
+    enddo
+    deallocate(tmpdims)
+  end subroutine allocate_dims
+  
+  subroutine read_ascii2d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((arrayin(j,k),j=1,size(arrayin,1)),k=1,size(arrayin,2))
+  end subroutine read_ascii2d
+  subroutine read_ascii3d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((arrayin(j,k,l),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3))
+  end subroutine read_ascii3d
+  subroutine read_ascii4d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) ((((arrayin(j,k,l,m),j=1,size(arrayin,1)),k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4))
+  end subroutine read_ascii4d
+  subroutine read_ascii5d(file_unit,mydims,ndim,ntot,arrayin)
+    implicit none
+    type(dims), pointer::  mydims
+    integer, dimension(:,:,:,:,:),intent(inout) :: arrayin
+    type(dims), pointer ::  current
+    integer, intent(in)::ndim,file_unit
+    integer n,ntot,i,j,k,l,m,o
+    
+    current=>mydims
+    ntot=1
+    do i =1,ndim
+       n=current%n
+       ntot=ntot*n
+       read(file_unit,'(A)') current%name
+       print*, 'Test Code: NAME is:',current%name
+       read(file_unit,'(A)') current%units
+       print*, 'Test Code: UNITS is:',current%units
+       read(file_unit,*) (current%values(j),j=1,n)
+       read(file_unit,*) ((current%bounds(j,k),j=1,2),k=1,n)
+       print*, 'Test Code: bounds',current%bounds(1,1),current%bounds(1,2)
+       current=>current%next
+    enddo
+    read(file_unit,*) (((((arrayin(j,k,l,m,o),j=1,size(arrayin,1)),&
+         k=1,size(arrayin,2)),l=1,size(arrayin,3)),m=1,size(arrayin,4)),&
+         o=1,size(arrayin,5))
+  end subroutine read_ascii5d
+
+
+end program main
+
diff --git a/Test/test_checker_works.py b/Test/test_checker_works.py
new file mode 100644
index 0000000..cf217ca
--- /dev/null
+++ b/Test/test_checker_works.py
@@ -0,0 +1,1767 @@
+####
+# This is trying to test all that cmor_checker catches all the possible failures
+###
+
+import sys
+import cmor
+import shutil
+import os
+import cdms2
+cdms2.setNetcdfShuffleFlag(0)
+cdms2.setNetcdfDeflateFlag(0)
+cdms2.setNetcdfDeflateLevelFlag(0)
+
+fo = sys.stdout
+
+if fo != sys.stdout:
+    fo=open(fo,"w")
+    
+# First of all run the Test script that generates the "good" file
+#execfile("Test/test_python_joerg_3.py")
+
+file = 'Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc'
+
+
+cmor.checkCMOR(fo,file,"Tables/CMIP5_6hrLev")
+
+
+## #Ok at this point we are going to test failures to make sure it actually checks for each things
+## # Ok testing the DRS
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/huhs/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmfos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/16hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolfdc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10b/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTEd_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/outputt/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="Test/CMIpP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+
+## try:
+##     F="Test/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     try:
+##         os.makedirs(os.path.split(F)[0])
+##     except:
+##         pass
+##     shutil.copy(file,F)
+##     print 'Testing DRS'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## #The following should pass, DRS test turned off
+## F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+## try:
+##     os.makedirs(os.path.split(F)[0])
+## except:
+##     pass
+## shutil.copy(file,F)
+## print 'No Testing DRS'
+## cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+## os.remove(F)
+
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_20f10010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_20100g10100-2010010218.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010g100-2010010218.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_201001010g0-2010010218.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2f01001041 8.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010h010218.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010h418.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     F="Test/CMIP5/output/INSTITUTE_ID/pcmdi-10a/noVolc2000/6hr/atmos/hus/r1i1p1/hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-201001041g8.nc"
+##     shutil.copy(file,F)
+##     print 'Testing DRS wrong date'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev")
+##     raise "DRS Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     f=cdms2.open(F,"a")
+##     h=f("hus")
+##     f.write(h,id='hur')
+##     f.close()
+##     print 'Testing many vars'
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise "Too man vars Check failed!"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     print 'Failed with CMOR error as expected:',err
+##     pass
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## gbl = ['branch_time','contact','Conventions','creation_date','experiment','experiment_id','forcing','frequency','initialization_method','institute_id','institution','model_id','modeling_realm','parent_experiment_id','physics_version','product','project_id','realization','source','table_id','tracking_id']
+## for gatt in gbl:
+##     try:
+##         print 'Testing no %s global att' % (gatt)
+##         F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##         shutil.copy(file,F)
+##         os.popen("ncdump %s > crap.txt"%F).readlines()
+##         fi=open("crap.txt")
+##         f=open("crapo.txt","w")
+##         fglb=False
+##         for l in fi.xreadlines():
+##             if l.find("// global attributes")>-1:
+##                 fglb = True
+##             if fglb is False:
+##                 f.write(l)
+##             elif l.find(":%s" % gatt)==-1:
+##                 f.write(l)
+##         f.close()
+##         fi.close()
+##         os.remove(F)
+##         os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##         os.remove("crap.txt")
+##         os.remove("crapo.txt")
+##         cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##         raise Exception,"No global attribute %s test failed" % (gatt)
+##     except cmor.check_CMOR_compliant.CMORError,err:
+##         if str(err).find("File must have global attribute: %s" % (gatt))>-1:
+##             print 'Failed with CMOR error as expected:',err
+##             pass
+##         else:
+##             raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+##     except Exception,err:
+##         raise Exception,err
+##     os.remove(F)
+
+# test validity of Creation Time
+## try:
+##     gatt = "creation_date"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-3]+'blabla" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     print 'Did we get here?'
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("Creation Date must be in format: %Y-%m-%dT%H:%M:%SZ yours is")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "branch_time"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-4]+'"blabla" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("branch_time must be convertible to float, you have")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "branch_time"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-4]+'1. ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("if global attribute parent_experiment_id is N/A then branch_time must be 0., you have")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "experiment_id"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-3]+'x" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("experiment_id file attribute must be one of")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "experiment"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-3]+'x" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("experiment file attribute must be one of")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "forcing"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-3]+'x" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("file attribute forcing must be a comma separated list with values in")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "frequency"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-6]+'moyn" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("frequency must be one")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "frequency"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-6]+'mon" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("your file name indicates a frequency of ")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "parent_experiment_id"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-3]+'bla" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("parent_experiment_id file attribute must be one of")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "parent_experiment_id"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-6]+'noVolc2000" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("parent_experiment_id and experiment_id cannot be the same")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     gatt = "project_id"
+##     print 'Testing Validity of %s' % (gatt)
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     fglb=False
+##     for l in fi.xreadlines():
+##         if l.find("// global attributes")>-1:
+##             fglb = True
+##         if fglb is False:
+##             f.write(l)
+##         elif l.find(":%s" % gatt)==-1:
+##             f.write(l)
+##         else:
+##             f.write(l.strip()[:-3]+'0" ;\n')
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong global attribute %s test failed" % (gatt)
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("project_id must be ")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of global attribute %s failed for the wrong reason! %s" % (gatt,err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## try:
+##     print 'Testing Validity of variable type'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for l in fi.xreadlines():
+##         if l.find("float hus(time")>-1:
+##             f.write(l.replace("float","double"))
+##             fglb = True
+##         else:
+##             f.write(l)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong variable type test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("variable typecode must be ")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing Validity of coordinate type'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for l in fi.xreadlines():
+##         if l.find("double lon(")>-1:
+##             f.write(l.replace("double","float"))
+##             fglb = True
+##         else:
+##             f.write(l)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong coord type test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("required typecode")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing Validity of coordinate type'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for l in fi.xreadlines():
+##         if l.find("double ap(")>-1:
+##             f.write(l.replace("double","float"))
+##             fglb = True
+##         else:
+##             f.write(l)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong coord type test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("variable typecode")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing Validity of coordinate name'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for l in fi.xreadlines():
+##         if l.find("lat")>-1:
+##             if l.find('"latitude"')>-1:
+##                 f.write(l.replace("lat","latitude",1))
+##             else:
+##                 f.write(l.replace("lat","latitude"))                
+##         else:
+##             f.write(l)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong coord name test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("Axis name latitude is not valid")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing Validity of coordinate units'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for l in fi.xreadlines():
+##         if l.find("lev:units")>-1:
+##             f.write(l.replace("1","%"))                
+##         else:
+##             f.write(l)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong coord units test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find("are not the required units")>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     import cdms2
+##     print 'Testing Validity of time units'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     f=cdms2.open(F,"r+")
+##     t=f['hus'].getTime()
+##     t.toRelativeTime("seconds since 2010")
+##     f.close()
+##     f=open("Tables/CMIP5_6hrLev")
+##     fot=open("tmp_table.txt","w")
+##     for ln in f.xreadlines():
+##         if ln.find("approx_in")>-1:
+##             fot.write(ln.replace("0.25","21600."))
+##         else:
+##             fot.write(ln)
+##     fot.close()
+##     cmor.checkCMOR(fo,F,"tmp_table.txt",dodrs=False)
+##     os.remove("tmp_table.txt")
+##     raise Exception,"wrong time units test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('Time units must be in "days since')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+
+## data = """time_bnds =
+##   -0.125, 0.125,
+##   0.125, 0.375,
+##   0.375, 0.625,
+##   0.625, 0.875,
+##   0.875, 1.125,
+##   1.125, 1.375,
+##   1.375, 1.625,
+##   1.625, 1.875 ;"""
+## data2 = """time_bnds =
+##   -0.1251, 0.1251,
+##   0.1251, 0.3751,
+##   0.3751, 0.6251,
+##   0.6251, 0.8751,
+##   0.8751, 1.1251,
+##   1.1251, 1.3751,
+##   1.3751, 1.6251,
+##   1.6251, 1.8751 ;"""
+## try:
+##     import cdms2
+##     print 'Testing time is mean of bounds'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     f.write(fi.read().replace(data,data2))
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"time is avg of bounds test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('Time units must be in "days since')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## data = """ time_bnds =
+##   -0.125, 0.125,
+##   0.125, 0.375,
+##   0.375, 0.625,
+##   0.625, 0.875,
+##   0.875, 1.125,
+##   1.125, 1.375,
+##   1.375, 1.625,
+##   1.625, 1.875 ;"""
+## try:
+##     import cdms2
+##     print 'Testing lack of bounds'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     s=fi.read()
+##     fi.close()
+##     fi=open("crap.txt",'w')
+##     fi.write(s.replace(data,""))
+##     fi.close()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("time:bounds")>-1:
+##             continue
+##         if ln.find("double time_bnds")>-1:
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"lack of bounds test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('attribute bounds is required for axis')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## data = """ time_bnds =
+##   -0.125, 0.125,
+##   0.125, 0.375,
+##   0.375, 0.625,
+##   0.625, 0.875,
+##   0.875, 1.125,
+##   1.125, 1.375,
+##   1.375, 1.625,
+##   1.625, 1.875 ;"""
+## try:
+##     import cdms2
+##     print 'Testing lack of bounds'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     s=fi.read()
+##     fi.close()
+##     fi=open("crap.txt",'w')
+##     fi.write(s.replace(data,""))
+##     fi.close()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("time:bounds")>-1:
+##             continue
+##         if ln.find("double time_bnds")>-1:
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"lack of bounds test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('attribute bounds is required for axis')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## data="""double ap(lev) ;"""
+## n=567
+## data=data[:15]
+## data2=""" ap = 0.1, 0.2, 0.3, 0.22, 0.1 ;
+
+##  b = 0, 0.1, 0.2, 0.5, 0.8 ;
+
+##  ps ="""
+
+## data3=""" ap_bnds =
+##   0, 0.15,
+##   0.15, 0.25,
+##   0.25, 0.25,
+##   0.25, 0.16,
+##   0.16, 0 ;
+
+##  b_bnds =
+##   0, 0.05,
+##   0.05, 0.15,
+##   0.15, 0.35,
+##   0.35, 0.65,
+##   0.65, 1 ;
+## """
+## try:
+##     import cdms2
+##     print 'Testing lack of formulaterms'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     s=fi.read()
+##     fi.close()
+##     print 'orig:',len(s)
+##     i=s.find(data)
+##     print 'i,n:',i,n
+##     s=s[:i]+s[i+n:]
+##     s=s.replace(data2,"")
+##     s=s.replace(data3,"")
+##     print 'end:',len(s)
+##     fi=open("crap.txt",'w')
+##     fi.write(s)
+##     fi.close()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("formula")>-1:
+##             continue
+##         if ln.find("1013")>-1:
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"lack of formula_terms test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('attribute formula_terms is required for axis')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong names on zfactors axis for hybrid'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("ap")>-1:
+##             tmp=ln.replace("ap","ap2")
+##             if tmp.find("formula_term")>-1: tmp=tmp.replace("ap2:","ap:")
+##             tmp=tmp.replace("ap2_bnds","ap_bnds")
+##             f.write(tmp)
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"lack of formula_terms test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('formula should be')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong names on stabdard_name axis for hybrid'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         ln=ln.replace("atmosphere_hybrid_sigma_pressure_coordinate","atmosphere_ln_pressure_coordinate")
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"lack of formula_terms test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('axis attribute formula should be')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## for anm in ['lon','lat','lev','time']:
+    ## try:
+    ##     print 'Testing axis attribute'
+    ##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+    ##     shutil.copy(file,F)
+    ##     os.popen("ncdump %s > crap.txt"%F).readlines()
+    ##     fi=open("crap.txt")
+    ##     f=open("crapo.txt","w")
+    ##     for ln in fi.xreadlines():
+    ##         if ln.find("%s:axis"%anm)>-1:
+    ##             continue
+    ##         f.write(ln)
+    ##     f.close()
+    ##     fi.close()
+    ##     os.remove(F)
+    ##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+    ##     os.remove("crap.txt")
+    ##     os.remove("crapo.txt")
+    ##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+    ##     raise Exception,"no axis attribute test failed"
+    ## except cmor.check_CMOR_compliant.CMORError,err:
+    ##     if str(err).find('axis must have associated axis attribute')>-1:
+    ##         print 'Failed with CMOR error as expected:',err
+    ##         pass
+    ##     else:
+    ##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+    ## except Exception,err:
+    ##     raise Exception,err
+    ## os.remove(F)
+## try:
+##     print 'Testing calendar attribute'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("time:calendar")>-1:
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"no calendar attribute test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('calendar attribute must be defined')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong calendar attribute'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("time:calendar")>-1:
+##             f.write('time:calendar = "mayan" ;')
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"no calendar attribute test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('calendar must be one of')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong variable datatype'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("float hus")>-1:
+##             f.write(ln.replace("float hus","double hus"))
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var typecode test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('variable typecode must be')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong variable name'
+##     F="HUS_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus")>-1:
+##             f.write(ln.replace("hus","HUS"))
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var name test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('does not start with standard CMIP5 variable name ')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong variable name'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus")>-1:
+##             f.write(ln.replace("hus","tas"))
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var name test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('Your file name says it contains variable')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong variable units'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus:units")>-1:
+##             f.write('                hus:units = "%" ;\n')
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var name test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('do not match IPCC units')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong dim ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("float hus(time, lev, lat, lon)")>-1:
+##             f.write(ln.replace("lat, lon","lon, lat"))
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('in ordering for dimension')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+
+## data = """ lon = 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62, 66, 70, 
+##     74, 78, 82, 86, 90, 94, 98, 102, 106, 110, 114, 118, 122, 126, 130, 134, 
+##     138, 142, 146, 150, 154, 158, 162, 166, 170, 174, 178, 182, 186, 190, 
+##     194, 198, 202, 206, 210, 214, 218, 222, 226, 230, 234, 238, 242, 246, 
+##     250, 254, 258, 262, 266, 270, 274, 278, 282, 286, 290, 294, 298, 302, 
+##     306, 310, 314, 318, 322, 326, 330, 334, 338, 342, 346, 350, 354, 358 ;"""
+## datanew = """ lon = """+"""358, 354, 350, 346, 342, 338, 334, 330, 326, 322, 318, 314, 310, 306, 302, 298, 294, 290, 286, 282, 278, 274, 270, 266, 262, 258, 254, 250, 246, 242, 238, 234, 230, 226, 222, 218, 214, 210, 206, 202, 198, 194, 190, 186, 182, 178, 174, 170, 166, 162, 158, 154, 150, 146, 142, 138, 134, 130, 126, 122, 118, 114, 110, 106, 102, 98, 94, 90, 86, 82, 78, 74, 70, 66, 62, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2 ;"""
+## try:
+##     print 'Testing wrong dim ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     s=fi.read()
+##     fi.close()
+##     fi=open("crap.txt","w")
+##     fi.write(s.replace(data,datanew))
+##     fi.close()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('axis values for lon must be stored:increasingly')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong dim ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("lon = 2, 6, 10"):
+##             f.write(ln.replace("lon = 2, 6, 10","lon = -2, 6, 10"))
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('first longitude must be >= 0 degrees_east')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## data = """ lat = -88, -84, -80, -76, -72, -68, -64, -60, -56, -52, -48, -44, -40, -36, 
+##     -32, -28, -24, -20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20, 24, 28, 32, 
+##     36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88 ;"""
+## datanew = """ lat = """+"""88, 84, 80, 76, 72, 68, 64, 60, 56, 52, 48, 44, 40, 36, 
+##     32, 28, 24, 20, 16, 12, 8, 4, 0, -4, -8, -12, -16, -20, -24, -28, -32, 
+##     -36, -40, -44, -48, -52, -56, -60, -64, -68, -72, -76, -80, -84, -88 ;"""
+## try:
+##     print 'Testing wrong dim ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     s=fi.read()
+##     fi.close()
+##     fi=open("crap.txt","w")
+##     fi.write(s.replace(data,datanew))
+##     fi.close()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('axis values for lat must be stored:increasingly')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## data = """ time = 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75 ;"""
+## datanew = """ time = 0, -0.25, -0.5, -0.75, -1, -1.25, -1.5, -1.75 ;"""
+
+## try:
+##     print 'Testing wrong dim ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2009123018.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     s=fi.read()
+##     fi.close()
+##     fi=open("crap.txt","w")
+##     fi.write(s.replace(data,datanew))
+##     fi.close()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('axis values for time must be stored:increasingly')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing fill and miss values different ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus:mis")>-1:
+##             f.write("                hus:missing_value = 1.e+30f ;\n")
+##             continue
+##         elif ln.find("hus:_F")>-1:
+##             f.write("                hus:_FillValue = 1.e+20f ;\n")
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('missing_value and _FillValue attributes are different')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing fill and miss values different ordering'
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus:mis")>-1:
+##             f.write("                hus:missing_value = 1.e+30f ;\n")
+##             continue
+##         elif ln.find("hus:_F")>-1:
+##             f.write("                hus:_FillValue = 1.e+30f ;\n")
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"wrong var ordering test failed"
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('missing_value and _FillValue must be set to 1.e20f')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## for att in ['associated_files','cell_measures','long_name','standard_name','units']:
+##     try:
+##         print 'Testing required var att %s' % att
+##         F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##         shutil.copy(file,F)
+##         os.popen("ncdump %s > crap.txt"%F).readlines()
+##         fi=open("crap.txt")
+##         f=open("crapo.txt","w")
+##         for ln in fi.xreadlines():
+##             if ln.find("hus:%s"%att)>-1:
+##                 continue
+##             f.write(ln)
+##         f.close()
+##         fi.close()
+##         os.remove(F)
+##         os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##         os.remove("crap.txt")
+##         os.remove("crapo.txt")
+##         cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##         raise Exception,"missing var att %s test failed" % att
+##     except cmor.check_CMOR_compliant.CMORError,err:
+##         if str(err).find('Attribute %s is required but not set for var hus' % att)>-1:
+##             print 'Failed with CMOR error as expected:',err
+##             pass
+##         else:
+##             raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+##     except Exception,err:
+##         raise Exception,err
+##     os.remove(F)
+## att = 'associated_files'
+## try:
+##     print 'Testing wrong var att %s' % att
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus:%s"%att)>-1:
+##             f.write('   hus:%s = "blabla" ; \n' % att)
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"missing var att %s test failed" % att
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('associated_files attributes must contain a baseURL')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+## try:
+##     print 'Testing wrong var att %s' % att
+##     F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+##     shutil.copy(file,F)
+##     os.popen("ncdump %s > crap.txt"%F).readlines()
+##     fi=open("crap.txt")
+##     f=open("crapo.txt","w")
+##     for ln in fi.xreadlines():
+##         if ln.find("hus:%s"%att)>-1:
+##             f.write(' hus:associated_files = "baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation gridspecFile: gridspec_fx_pcmdi-10a_noVolc2000_r0i0p0.nc cellAreaFile: areacellla_fx_pcmdi-10a_noVolc2000_r0i0p0.nc" ;')
+##             continue
+##         f.write(ln)
+##     f.close()
+##     fi.close()
+##     os.remove(F)
+##     os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+##     os.remove("crap.txt")
+##     os.remove("crapo.txt")
+##     cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+##     raise Exception,"missing var att %s test failed" % att
+## except cmor.check_CMOR_compliant.CMORError,err:
+##     if str(err).find('associated files should point to file containing: areacella')>-1:
+##         print 'Failed with CMOR error as expected:',err
+##         pass
+##     else:
+##         raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+## except Exception,err:
+##     raise Exception,err
+## os.remove(F)
+att="cell_measures"
+try:
+    print 'Testing wrong var att %s' % att
+    F="hus_6hrLev_pcmdi-10a_noVolc2000_r1i1p1_2010010100-2010010218.nc"
+    shutil.copy(file,F)
+    os.popen("ncdump %s > crap.txt"%F).readlines()
+    fi=open("crap.txt")
+    f=open("crapo.txt","w")
+    for ln in fi.xreadlines():
+        if ln.find("hus:%s"%att)>-1:
+            f.write(' hus:%s = "area: cl" ;' % att)
+            continue
+        f.write(ln)
+    f.close()
+    fi.close()
+    os.remove(F)
+    os.popen("ncgen -b -o %s crapo.txt" % (F)).readlines()
+    os.remove("crap.txt")
+    os.remove("crapo.txt")
+    cmor.checkCMOR(fo,F,"Tables/CMIP5_6hrLev",dodrs=False)
+    raise Exception,"missing var att %s test failed" % att
+except cmor.check_CMOR_compliant.CMORError,err:
+    if str(err).find('variable attribute cell_measures should be')>-1:
+        print 'Failed with CMOR error as expected:',err
+        pass
+    else:
+        raise Exception,"Checker of variable type failed for the wrong reason! %s" % (err)
+except Exception,err:
+    raise Exception,err
+os.remove(F)
+
+
+
+
+
diff --git a/Test/test_cmor_grid_alejandro.f90 b/Test/test_cmor_grid_alejandro.f90
new file mode 100644
index 0000000..600261b
--- /dev/null
+++ b/Test/test_cmor_grid_alejandro.f90
@@ -0,0 +1,167 @@
+PROGRAM test_cmor_grid
+   USE cmor_users_functions
+
+   IMPLICIT NONE
+
+   INTEGER, PARAMETER :: n_sections = 3
+   INTEGER, PARAMETER :: n_points = 10
+   INTEGER, PARAMETER :: n_lev = 4
+   real, parameter :: R_UNDEF = -1.0E+30
+   INTEGER :: i, j, k, var_id,option
+!    REAL :: x(n_lev,n_points,n_sections)
+   REAL :: x(n_points,n_sections,n_lev)
+   real :: z_ax(n_lev),z_bounds(2,n_points)
+   double precision :: profile_ax(n_points),section_ax(n_sections)
+   real :: lat(n_points,n_sections),lon(n_points,n_sections)
+   real :: lat_bounds(4,n_points,n_sections),lon_bounds(4,n_points,n_sections)
+   character(len=128) :: table='Test/CMIP5_cf3hr.txt'
+   character(len=32) :: sec_units='days since 2000-01-01'
+   integer :: error_flag,height_axid,time_axid,profile_axid,grid_id,section_axid
+   real :: lat_step,lon_step
+   integer latvar_id,lonvar_id
+   integer blatvar_id,blonvar_id
+
+   print *, 'Option (0,1,other)?'
+   read(*,*) option
+
+   if (option == 0) then ! 1D grid, no time dimension
+      table='Test/CMIP5_cf3hr_0.txt'
+      sec_units='1'
+   endif
+   if (option == 1) then ! 1D grid, section as time dimension
+      table='Test/CMIP5_cf3hr_1.txt'
+      sec_units='days since 2000-01-01'
+   endif
+   
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Fill in variables with some data
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   do k=1,n_sections
+     do j=1,n_points
+       do i=1,n_lev
+          x(j,k,i) = k*1000000 + 1000*j + i
+       enddo
+     enddo
+   enddo
+
+   ! Values for section axis
+   do i=1,n_sections
+     section_ax(i) = float(i)
+   enddo
+
+   ! Values for profile axis
+   do i=1,n_points
+     profile_ax(i) = float(i)
+   enddo
+      
+   ! Height of vertical levels
+   do i=1,n_lev
+     z_ax(i) = 240.0 + 480.0*(i-1)
+     z_bounds(1,i) = z_ax(i) - 240.0
+     z_bounds(2,i) = z_ax(i) + 240.0
+   enddo
+    
+   lat_step = 180.0/(n_points+2)
+   lon_step = 360.0/(n_points+2)
+   do i=1,n_points
+      lat(i,:) = -90.0 + lat_step*0.5 + lat_step*i
+      lon(i,:) =   0.0 + lon_step*0.5 + lon_step*i
+       lat_bounds(1,i,:) = lat(i,:) - lat_step*0.5
+       lat_bounds(2,i,:) = lat(i,:) - lat_step*0.5
+       lat_bounds(3,i,:) = lat(i,:) + lat_step*0.5
+       lat_bounds(4,i,:) = lat(i,:) + lat_step*0.5
+       lon_bounds(1,i,:) = lon(i,:) - lon_step*0.5
+       lon_bounds(2,i,:) = lon(i,:) + lon_step*0.5
+       lon_bounds(3,i,:) = lon(i,:) - lon_step*0.5
+       lon_bounds(4,i,:) = lon(i,:) + lon_step*0.5
+   enddo
+
+
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Specify path for tables and set up other CMOR options
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   error_flag = cmor_setup(inpath='./',netcdf_file_action="replace",create_subdirectories=0)
+
+   print *, '---------------Define dataset'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define dataset as output from COSP, and other model details
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   error_flag = cmor_dataset(outpath='Test/',experiment_id='AMIP',institution='Met Office', &
+                    source='GICCM1 2002 source',calendar='360_day',realization=1,contact='alejandro.bodas at metoffice.gov.uk', &
+                    history='history',comment='En un lugar de la Mancha de cuyo nombre no quiero acordarme', &
+                    references='references',forcing="CH4",&
+                    institute_id="PCMDI",model_id="GICCM1")
+   
+   print *, '---------------Define axis'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define axis
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   profile_axid = cmor_axis(table=table, table_entry='location', units='1', &
+                                                       length=n_points, coord_vals=profile_ax)
+   height_axid  = cmor_axis(table=table, table_entry='height40', units='m', &
+                                                       length=n_lev, coord_vals=z_ax,cell_bounds=z_bounds)
+   section_axid  = cmor_axis(table=table, table_entry='section', units=sec_units, &
+                                                       length=n_sections, coord_vals=section_ax)
+   
+   print *, '---------------Define grid'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define grid
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   if ((option == 0).or.(option == 1)) then
+     grid_id = cmor_grid((/profile_axid/), lat(:,1), lon(:,1))
+   else
+      print*, "AXES FOR GRID: ",(/profile_axid, section_axid/)
+     grid_id = cmor_grid((/profile_axid, section_axid/),nvertices=4)
+     print*, 'got grid:',grid_id
+     !need to add code for defining the lat lon var here
+     latvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='latitude',units='degrees_north')
+     lonvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='longitude',units='degrees_east')
+     blatvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='vertices_latitude',units='degrees_north')
+     blonvar_id = cmor_time_varying_grid_coordinate(grid_id,table_entry='vertices_longitude',units='degrees_east')
+   endif
+   if (grid_id > 0) then
+        print *,  '*********** Error, grid_id: ', grid_id
+        stop
+   endif
+   
+   print *, '---------------Define variables'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Define variables. Fill in dimensions table first if needed
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   if ((option == 0).or.(option == 1)) then
+     var_id = cmor_variable(table=table, table_entry='curtain', units='1', &
+                                 axis_ids=(/grid_id,section_axid,height_axid/), missing_value=R_UNDEF)
+   else
+     var_id = cmor_variable(table=table, table_entry='curtain', units='1', &
+                                 axis_ids=(/grid_id,height_axid/), missing_value=R_UNDEF)
+   endif
+   
+   print *, '---------------Write variables'
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Write variables to file
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   if ((option == 0).or.(option == 1)) then
+     error_flag = cmor_write(var_id=var_id, data=x)
+   else
+     error_flag = cmor_write(var_id=var_id, data=x)
+     error_flag = cmor_write(var_id=latvar_id, data=lat, store_with=var_id)
+     error_flag = cmor_write(var_id=lonvar_id, data=lon, store_with=var_id)
+     error_flag = cmor_write(var_id=latvar_id, data=lat, store_with=var_id)
+     error_flag = cmor_write(var_id=lonvar_id, data=lon, store_with=var_id)
+     print*, 'writing blat',blatvar_id
+     error_flag = cmor_write(var_id=blatvar_id, data=lat_bounds, store_with=var_id)
+     print*, 'writing blon',blonvar_id
+     error_flag = cmor_write(var_id=blonvar_id, data=lon_bounds, store_with=var_id)
+   endif
+   if (error_flag /= 0) then
+        print *,  '*********** Error writing variable: ', error_flag
+        stop
+   endif
+   
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   ! Close files
+   !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   error_flag = cmor_close()
+                               
+   
+ END
diff --git a/Test/test_compression.py b/Test/test_compression.py
new file mode 100644
index 0000000..af9a1e9
--- /dev/null
+++ b/Test/test_compression.py
@@ -0,0 +1,63 @@
+import sys,os
+try:
+    import cdms2
+except:
+    print 'This test requires cdms2 for I/O'
+    sys.exit()
+    
+import cmor,numpy
+
+f=cdms2.open(os.path.join(cmor.__path__[0],'..','..','..','..','sample_data/clt.nc'))
+
+pth = os.path.split(os.path.realpath(os.curdir))
+if pth[-1]=='Test':
+    ipth = opth = '.'
+else:
+    ipth = opth = 'Test'
+cmor.setup(inpath=ipth,
+           set_verbosity=cmor.CMOR_NORMAL,
+           netcdf_file_action = cmor.CMOR_REPLACE)
+
+cmor.dataset(
+    outpath = opth,
+    experiment_id = "historical",
+    institution = "PCMDI",
+    source = "GICCM1 2002",
+    calendar = "standard",
+    contact="Tim Lincecum",
+    institute_id="PCMDI",
+    model_id="GICCM1",forcing="Nat",parent_experiment_id="N/A",branch_time=0.)
+
+cmor.load_table("Tables/CMIP5_Amon")
+
+s=f("clt",slice(14))
+Saxes = s.getAxisList()
+
+axes=[]
+for ax in Saxes[1:]:
+    tmp = cmor.axis(ax.id,coord_vals=ax[:],cell_bounds=ax.getBounds(),units=ax.units)
+    axes.append(tmp)
+
+#Now creates a dummy HUGE axis for resizing s as really big
+factor = 100
+nt = s.shape[0]*factor
+print 'nt is:',nt
+t = numpy.arange(nt)
+
+tmp = cmor.axis('time',coord_vals=t,units=Saxes[0].units,cell_bounds=numpy.arange(nt+1))
+axes.insert(0,tmp)
+print axes
+var_id1 = cmor.variable(s.id,s.units,axes)
+## the one with 2 at the end is compressed
+var_id2 = cmor.variable(s.id,s.units,axes)
+sh=list(s.shape)
+sh[0]=nt
+s=numpy.resize(s,sh)
+#s=numpy.where(numpy.greater(s,100.),100,s)
+s=numpy.random.random(s.shape)*100.
+print s.shape
+cmor.write(var_id1,s)
+cmor.close(var_id1)
+cmor.write(var_id2,s)
+
+cmor.close()
diff --git a/Test/test_dimensionless.f90 b/Test/test_dimensionless.f90
new file mode 100644
index 0000000..46d7bfa
--- /dev/null
+++ b/Test/test_dimensionless.f90
@@ -0,0 +1,588 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+          plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    CASE ('tro3')
+       factor = 1.
+       offset = 0.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             field(k,i,j) = ((SIZE(field, 1) - k)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 2.8
+       offset = 10.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 4       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'tro3 ', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', '1e-9 ',  'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=4), DIMENSION(n3d) :: entry3d = (/ 'cl  ', 'tro3', 'ua  ', 'ta  ' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lev2,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, ilon2,ilat2,itim2
+  double precision bt
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  bt=0.
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  !  Define all axes that will be needed
+  
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ilat2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+
+print*, 'Test Code:',lev,':',plevs
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev2,                   &
+       coord_vals=plevs)
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='standard_hybrid_sigma',       &
+       units='1',  &
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.2, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .15, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='Tables/CMIP5_Amon',      &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilev, ilon, ilat, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',      &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ipres, ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     print*, m, entry2d(m)
+     if (m.ne.3) then
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  else
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Lmon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon2, ilat2, itim2 /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m)) 
+  endif
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/test_fortran_example_00.f90 b/Test/test_fortran_example_00.f90
new file mode 100644
index 0000000..3c9daf5
--- /dev/null
+++ b/Test/test_fortran_example_00.f90
@@ -0,0 +1,517 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+          plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev2) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0,bt
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim,i,ilon2,ilat2,itim2
+  real :: missing
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k
+
+  bt=0.
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  print*,'Test code: done'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  print*, 'Test code: done 2 lalala'
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+
+  ilat2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+
+  print*, 'Test code: ok calling axis stuff lat'
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  print*, 'Test code: ok calling axis stuff lon',ilat
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  print*, 'Test code: ok calling axis stuff pressure',ilon
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev2,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  print*, 'Test code: ok calling axis stuff time',ipres
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='30 days')
+
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  print*, 'Test code: ok calling axis stuff lev2',itim
+  ilev = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='standard_hybrid_sigma',       &
+       units="1",   &
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  print*, 'Test code: ok called stuff lev2',ilev
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  p0array(1)=p0
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  print*, 'Test code: zfactor p0'
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  print*, 'Test code: result',error_flag
+  print*, 'Test code: zfactor b'
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  print*, 'Test code: result',error_flag
+  print*, 'Test code: zfactor a'
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  print*, 'Test code: result',error_flag
+  print*, 'Test code: zfactor ps'
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  print*, 'Test code: result',zfactor_id
+  print*, 'Test code: var3d'
+  missing = 1.e28
+  var3d_ids(1) = cmor_variable(    &
+       table='Tables/CMIP5_Amon',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=missing, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  print*, 'Test code: result',var3d_ids(1)
+  DO m=2,n3d
+     print*, 'Test code: var: ',entry3d(m)
+     var3d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=missing,       &
+          original_name=varin3d(m))
+     print*, 'Test code: result',var3d_ids(m)
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     print*, 'Test code: var: ',entry2d(m)
+     if (m.ne.3) then
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  else
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Lmon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon2, ilat2, itim2 /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m)) 
+  endif
+     print*, 'Test code: result',var2d_ids(m)
+  ENDDO
+
+  PRINT*, 'Test code:  '
+  PRINT*, 'Test code: completed everything up to writing output fields '
+  PRINT*, 'Test code:  '
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    print*, 'Test code: result',error_flag
+   ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+
+  error_flag = cmor_close()
+
+end program testing
diff --git a/Test/test_fortran_example_01.f90 b/Test/test_fortran_example_01.f90
new file mode 100644
index 0000000..d8e6af5
--- /dev/null
+++ b/Test/test_fortran_example_01.f90
@@ -0,0 +1,335 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: nvert = 4    ! number of time samples to process
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 3       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 4       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0,bt
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim,i
+  real :: missing
+  character(1024) inpath,mapnm
+  character(len=30),dimension(6) ::params =(/ "standard_parallel1            ",&
+       "longitude_of_central_meridian ","latitude_of_projection_origin ",&
+       "false_easting                 ","false_northing                ", &
+       "standard_parallel2            " /)
+  character(len=5) ,dimension(6) :: punits = (/ "     ","     ","     ","     ","     ","     " /)
+  double precision,dimension(6) :: pvalues = (/-20.,175.,13.,8.,0.,20. /)
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k,tables(2),vars(10),axes(10)
+
+  integer pass_axes(2)
+
+  integer :: grid_id
+
+
+  real lon_coords(lon,lat),lat_coords(lon,lat)
+  real lon_vertices(nvert,lon,lat),lat_vertices(nvert,lon,lat)
+  real area(lon,lat)
+  real x(lon),y(lat)
+  
+  real lon0,lat0,delta_lon,delta_lat
+  
+  bt=0.
+
+  lon0 = 280.
+  lat0=0.;
+  delta_lon = 10.;
+  delta_lat = 10.;
+  
+!!$  /* first construct grid lon/lat */
+  do j=1,lat
+     y(j)=j
+     do i=1,lon
+        x(i)=i
+        lon_coords(i,j) = lon0+delta_lon*(j+i-1);
+        lat_coords(i,j) = lat0+delta_lat*(j-i-2);
+!!$      /* vertices lon*/
+!!$      k = i*4+j*lon*4+0;
+!!$      printf('i,j,k: %i, %i, %i\n',i,j,k);
+        lon_vertices(1,i,j) = lon_coords(i,j)-delta_lon;
+        lon_vertices(2,i,j) = lon_coords(i,j);
+        lon_vertices(3,i,j) = lon_coords(i,j)+delta_lon;
+        lon_vertices(4,i,j) = lon_coords(i,j);
+!!$      /* vertices lat */
+        lat_vertices(1,i,j) = lat_coords(i,j);
+        lat_vertices(2,i,j) = lat_coords(i,j)-delta_lat;
+        lat_vertices(3,i,j) = lat_coords(i,j);
+        lat_vertices(4,i,j) = lat_coords(i,j)+delta_lat;
+     end do
+  end do
+
+  inpath ='Test'
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  
+    error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+
+    tables(1) = cmor_load_table('Tables/CMIP5_Amon')
+    tables(2) = cmor_load_table('Tables/CMIP5_grids')
+
+    axes(1) = cmor_axis(table_entry = 'x', &
+                        units = 'm', &
+                        length = lon, &
+                        coord_vals = x)
+    axes(2) = cmor_axis(table_entry = 'y', &
+                        units = 'm', &
+                        length = lat, &
+                        coord_vals = y)
+                        
+    grid_id = cmor_grid(axis_ids = axes, &
+                        latitude = lat_coords, &
+                        longitude = lon_coords, &
+                        latitude_vertices = lat_vertices, &
+                        longitude_vertices = lon_vertices)
+    print*, 'Got grid id: ',grid_id
+    
+    mapnm = 'lambert_conformal_conic'
+    error_flag = cmor_set_grid_mapping(grid_id,&
+         mapnm,params,pvalues,punits)
+
+    call cmor_set_table(table_id=tables(2))
+
+     
+    axes(3) = cmor_axis(table = 'Tables/CMIP5_Amon',&
+                        table_entry = 'time',&
+                        units = 'days since 1980',&
+                        length = 2 &
+                        )
+    
+    
+    pass_axes(2) = axes(3)
+    pass_axes(1) = grid_id
+    
+    vars(1) = cmor_variable(table = 'Tables/CMIP5_Amon',&
+                            table_entry = 'hfls',&
+                            units = 'W m-2',&
+                            axis_ids = pass_axes,&
+                            positive = 'down',&
+                            original_name = 'HFLS',&
+                            history = 'no history',&
+                            comment = 'no future'&
+                            )
+    do i=1,ntimes
+       call read_time(i, time(1), bnds_time)
+       print*, 'Test code: writing time:',i,'of',ntimes,time(1)
+       call read_2d_input_files(i, 'LATENT', data2d)
+       error_flag = cmor_write(var_id = vars(1) ,&
+                               data =data2d,&
+                               ntimes_passed = 1,&
+                               time_vals = time,&
+                               time_bnds = bnds_time)
+    end do
+   error_flag = cmor_close()
+    
+  end program testing
+  
diff --git a/Test/test_fortran_example_02.f90 b/Test/test_fortran_example_02.f90
new file mode 100644
index 0000000..2680528
--- /dev/null
+++ b/Test/test_fortran_example_02.f90
@@ -0,0 +1,376 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    INTEGER, INTENT(OUT), DIMENSION(:) ::  station
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lons
+    
+    INTEGER :: i, j, k
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    k = 1
+    DO i = 1, SIZE(alons)
+      DO j = 1, SIZE(alats)
+        station(k) = k
+        st_lons(k) = alons(i)
+        st_lats(k) = alats(j)
+        k = k+1
+      END DO   
+    END DO 
+    
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  !------------------------------------------------
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  !------------------------------------------------
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+!=======================================================
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: nst = 12      ! number of stations
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+  INTEGER igrid;
+                          
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  REAL, DIMENSION(lon*lat,lev) :: data2d_st
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  INTEGER, DIMENSION(lon*lat) :: station
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lons
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lats
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, i, ist
+  real :: missing
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k
+
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  print*,'Test code: done'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='2xCO2 equilibrium experiment',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)' )
+  print*, 'Test code: done 2 lalala'
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+  
+
+  print*, 'Test code: ok calling axis stuff station'
+  ist = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='station',       &
+       units=' ',        &  
+       length=nst,                   &
+       coord_vals=station )      
+       
+   
+  print*, 'Test code: ok calling axis stuff pressure',ilon
+  ipres = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='pressure',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  print*, 'Test code: ok calling axis stuff time',ipres
+  itim = cmor_axis(  &
+       table='IPCC_test_table_S',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='20 minutes')
+
+  
+       
+  igrid = cmor_grid((/ist/), st_lats, st_lons)       
+       
+  write(*,'(a, 12f6.1)'), 'lons: ',st_lons
+  write(*,'(a, 12f6.1)'), 'lats: ',st_lats
+  
+  !===============================================================
+  print*, ' '
+   
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  DO m=1,4
+     print*, 'Test code: var:  ',entry2d(m)
+     var2d_ids(m) = cmor_variable(    &
+          table='IPCC_test_table_S',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ igrid, itim /), &
+          missing_value=missing,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+     print*, 'Test code: result',var2d_ids(m)
+  ENDDO   
+  
+
+  PRINT*, 'Test code:  '
+  PRINT*, 'Test code: completed everything up to writing output fields '
+  PRINT*, 'Test code:  '
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)    
+        k = 1  
+        DO j = 1, lat
+          data1dtest(k:k+lat) = data2d(:,j) 
+          k = k+lat+1 
+        END DO   
+        !write(*,'(a, 12(f8.1,1x))'), entry2d(m), data1dtest            
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data1dtest,                          &
+             file_suffix ="ftn-02",                               &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO 
+     
+     
+  END DO time_loop
+
+  error_flag = cmor_close()
+
+end program testing
diff --git a/Test/test_grid.c b/Test/test_grid.c
new file mode 100644
index 0000000..5d77b9d
--- /dev/null
+++ b/Test/test_grid.c
@@ -0,0 +1,242 @@
+#include <time.h>
+#include <stdio.h>
+#include<string.h>
+#include "cmor.h"
+#include <stdlib.h>
+#include <math.h>
+
+void read_time(it, time, time_bnds)
+     int it;
+     double time[];
+     double time_bnds[];
+{    
+  time[0] = (it-0.5)*30.;
+  time_bnds[0] = (it-1)*30.;
+  time_bnds[1] = it*30.;
+
+  time[0]=it;
+  time_bnds[0] = it;
+  time_bnds[1] = it+1;
+
+}
+  
+void read_3d_input_files(it, varname, field,n0,n1,n2)
+     int it,n0,n1,n2;
+     char *varname;
+     double field[];
+{
+  int i,j,k;
+  float factor,offset;
+    
+  if (strcmp(varname,"CLOUD")==0) {
+    factor = 0.1;
+    offset = -50.;
+  }
+  else if (strcmp(varname,"U")==0) {
+    factor = 1.;
+    offset = 100.;
+  }
+  else if (strcmp(varname,"T")==0) {
+    factor = 0.5;
+    offset = -150.;
+  }
+    
+  for (k=0;k<n2;k++) {
+    for (j=0;j<n1;j++) {
+      for (i=0;i<n0;i++) {
+        field[k*(n0*n1)+j*n0+i] = (k*64 + j*16 + i*4 + it)*factor - offset;
+      }
+    }
+  }
+}
+
+void read_2d_input_files(it, varname, field, n0, n1)
+  int it,n0,n1;
+  char *varname;
+  double field[];
+{    
+  int i, j,k;
+  double factor, offset;
+  double tmp;
+  
+  if (strcmp(varname,"LATENT")==0){
+    factor = 1.;
+    offset = 120.;
+  }
+  else if (strcmp(varname,"TSURF")==0){
+    factor = 2.0;
+    offset = -230.;
+  }
+  else if (strcmp(varname,"SOIL_WET")==0){
+    factor = 10.;
+    offset = 0.;
+  }
+  else if (strcmp(varname,"PSURF")==0){
+    factor = 1.;
+    offset = -9.7e2;
+  }
+
+  for (j=0;j<n0;j++){
+    for (i=0;i<n1;i++) {
+      tmp = ((double)j*16. + (double)(i)*4. + (double)it)*factor - offset;
+      k= (n0-1-j)*n1+i;
+      field[k] = tmp;
+    }
+  }
+}
+
+int main()
+{
+
+  /*   dimension parameters: */
+  /* --------------------------------- */
+#define   ntimes  2    /* number of time samples to process */
+#define   lon  3       /* number of longitude grid cells   */
+#define   lat  4       /* number of latitude grid cells */
+#define   lev  5       /* number of standard pressure levels */
+
+  double x[lon];
+  double y[lat];
+  double lon_coords[lon*lat];
+  double lat_coords[lon*lat];
+  double lon_vertices[lon*lat*4];
+  double lat_vertices[lon*lat*4];
+ 
+  double data2d[lat*lon];
+  double data3d[lev*lat*lon];
+
+  int myaxes[10];
+  int mygrids[10];
+  int myvars[10];
+  int tables[4];
+  int axes_ids[CMOR_MAX_DIMENSIONS];
+  int i,j,k,ierr;
+
+  double Time[ntimes];
+  double  bnds_time[ntimes*2];
+  double tolerance=1.e-4;
+  double lon0 = 280.;
+  double lat0=0.;
+  double delta_lon = 10.;
+  double delta_lat = 10.;
+  char id[CMOR_MAX_STRING];
+  double tmpf=0.;
+
+#define nparam 6 /* number of grid parameters */
+#define lparam 40
+#define lunits 14
+  char params[nparam][lparam] = {"standard_parallel1","longitude_of_central_meridian","latitude_of_projection_origin","false_easting","false_northing","standard_parallel2"};
+  char punits[nparam][lunits] = {"degrees_north","degrees_east","degrees_north","m","m","degrees_north"};
+  //char punits[nparam][lunits] = {"","","","","",""};
+  double pvalues[nparam] = {-20.,175.,13.,8.,0.,20};
+  int exit_mode;
+  /* first construct grid lon/lat */
+  for (j=0;j<lat;j++) {
+    y[j]=j;
+    for (i=0;i<lon;i++) {
+      x[i]=i;
+      lon_coords[i+j*lon] = lon0+delta_lon*(j+1+i);
+      lat_coords[i+j*lon] = lat0+delta_lat*(j+1-i);
+      /* vertices lon*/
+      k = i*4+j*lon*4+0;
+      printf("i,j,k: %i, %i, %i\n",i,j,k);
+      lon_vertices[i*4+j*lon*4+0] = lon_coords[i+j*lon]-delta_lon;
+      lon_vertices[i*4+j*lon*4+1] = lon_coords[i+j*lon];
+      lon_vertices[i*4+j*lon*4+2] = lon_coords[i+j*lon]+delta_lon;
+      lon_vertices[i*4+j*lon*4+3] = lon_coords[i+j*lon];
+      /* vertices lat */
+      lat_vertices[i*4+j*lon*4+0] = lat_coords[i+j*lon];
+      lat_vertices[i*4+j*lon*4+1] = lat_coords[i+j*lon]-delta_lat;
+      lat_vertices[i*4+j*lon*4+2] = lat_coords[i+j*lon];
+      lat_vertices[i*4+j*lon*4+3] = lat_coords[i+j*lon]+delta_lat;
+      }
+  }
+
+  exit_mode = CMOR_EXIT_ON_MAJOR;
+  j = CMOR_REPLACE;
+  printf("Test code: ok init cmor, %i\n",exit_mode);
+  ierr = cmor_setup(NULL,&j,NULL,&exit_mode,NULL,NULL);
+  printf("Test code: ok init cmor\n");
+  int tmpmo[12];
+  ierr = cmor_dataset(
+       "Test",
+       "amip",
+       "GICC (Generic International Climate Center, Geneva, Switzerland)",
+       "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+       "standard",
+       1,
+       "Rusty Koder (koder at middle_earth.net)",
+       "Output from archive/giccm_03_std_2xCO2_2256.",
+       "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",
+       "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",
+       0,
+       0,
+       tmpmo,
+       "GICCM1\0","N/A",0,0,"GICC","N/A",&tmpf);
+  printf("Test code: ok load cmor table(s)\n");
+  ierr = cmor_load_table("Tables/CMIP5_Amon",&tables[1]);
+  printf("Test code: ok load cmor table(s)\n");
+  //ierr = cmor_load_table("Test/IPCC_test_table_Grids",&tables[0]);
+  ierr = cmor_load_table("Tables/CMIP5_grids",&tables[0]);
+  printf("Test code: ok load cmor table(s)\n");
+  ierr = cmor_set_table(tables[0]);
+
+  /* first define grid axes (x/y/rlon/rlat,etc... */
+  ierr = cmor_axis(&myaxes[0],"x","m",lon,&x[0],'d',NULL,0,NULL);
+  printf("Test code: ok got axes id: %i for 'x'\n",myaxes[0]);
+  ierr = cmor_axis(&myaxes[1],"y","m",lat,&y[0],'d',NULL,0,NULL);
+  printf("Test code: ok got axes id: %i for 'y'\n",myaxes[1]);
+
+  axes_ids[0] = myaxes[1];
+  axes_ids[1] = myaxes[0];
+  /*now defines the grid */
+  printf("going to grid stuff \n");
+    ierr = cmor_grid(&mygrids[0],2,&axes_ids[0],'d',&lat_coords[0],&lon_coords[0],4,&lat_vertices[0],&lon_vertices[0]);
+    //ierr = cmor_grid(&mygrids[0],2,&axes_ids[0],'d',&lat_coords[0],&lon_coords[0],0,NULL,NULL);
+
+  for (i=0;i<cmor_grids[0].ndims;i++) {
+    printf("Dim : %i the grid has the follwoing axes on itself: %i (%s)\n",i,cmor_grids[0].axes_ids[i],cmor_axes[cmor_grids[0].axes_ids[i]].id);
+  }
+
+
+
+  /* ok puts some grid mappings in it,  not sure these parmeters make sens! */
+  for(i=0;i<nparam;i++) printf("Test code: ok paramter: %i is: %s, with value %lf and units '%s'\n",i,params[i],pvalues[i],punits[i]);
+  
+  printf("back from grid going to mapping \n");
+  ierr = cmor_set_grid_mapping(mygrids[0],"lambert_conformal_conic",nparam-1,&params[0][0],lparam,pvalues,&punits[0][0],lunits);
+
+
+  for (i=0;i<cmor_grids[0].ndims;i++) {
+    printf("New Dim : %i the grid has the follwoing axes on itself: %i (%s)\n",i,cmor_grids[0].axes_ids[i],cmor_axes[cmor_grids[0].axes_ids[i]].id);
+  }
+
+  /* ok sets back the vars table */
+  cmor_set_table(tables[1]);
+
+
+  for(i=0;i<ntimes;i++) read_time(i, &Time[i], &bnds_time[2*i]);
+  ierr = cmor_axis(&myaxes[3],"time","months since 1980",2,&Time[0],'d',&bnds_time[0],2,NULL);
+
+  printf("time axis id: %i\n",myaxes[3]);
+  axes_ids[0]=myaxes[3]; /*time*/
+  axes_ids[1]=mygrids[0]; /*grid */
+
+  printf("Test code: sending axes_ids: %i %i\n",axes_ids[0],axes_ids[1]);
+
+  ierr = cmor_variable(&myvars[0],"hfls","W m-2",2,axes_ids,'d',NULL,&tolerance,"down","HFLS","no history","no future");
+  
+  for (i=0;i<ntimes;i++) {
+    printf("Test code: writing time: %i of %i\n",i+1,ntimes);
+    
+    printf("Test code: 2d\n");
+    read_2d_input_files(i, "LATENT", &data2d[0],lat,lon);
+    //for(j=0;j<10;j++) printf("Test code: %i out of %i : %lf\n",j,9,data2d[j]);
+    printf("var id: %i\n",myvars[0]);
+    ierr = cmor_write(myvars[0],&data2d,'d',NULL,1,NULL,NULL,NULL);
+  }
+  printf("ok loop done\n");
+  ierr = cmor_close();
+  printf("Test code: done\n");
+  return 0;
+}
diff --git a/Test/test_lots_of_variables.c b/Test/test_lots_of_variables.c
new file mode 100644
index 0000000..f5f7256
--- /dev/null
+++ b/Test/test_lots_of_variables.c
@@ -0,0 +1,350 @@
+#include <time.h>
+#include <stdio.h>
+#include<string.h>
+#include "cmor.h"
+#include <stdlib.h>
+
+void read_coords(alats, alons, plevs, bnds_lat, bnds_lon,lon,lat,lev)
+     double *alats,*alons;
+     int *plevs;
+     double *bnds_lat,*bnds_lon;
+     int lon,lat,lev;
+{
+  int i;
+    
+  for (i=0;i<lon;i++) {
+    alons[i] = i*360./lon;
+    bnds_lon[2*i] = (i - 0.5)*360./lon;
+    bnds_lon[2*i+1] = (i + 0.5)*360./lon;
+  };
+  
+
+  for (i=0;i<lat;i++) {
+    alats[i] = (lat-i)*10;
+    bnds_lat[2*i] = (lat-i)*10 + 5.;
+    bnds_lat[2*i+1] = (lat-i)*10 - 5.;
+  };
+  
+
+  for (i=0;i<lev;i++) {
+    plevs[i] = (i+1)*100;
+  }
+}
+
+void read_time(it, time, time_bnds)
+     int it;
+     double time[];
+     double time_bnds[];
+{    
+  time[0] = (it-0.5)*30.;
+  time_bnds[0] = (it-1)*30.;
+  time_bnds[1] = it*30.;
+
+  time[0]=it;
+  time_bnds[0] = it;
+  time_bnds[1] = it+1;
+
+}
+  
+void read_3d_input_files(it, varname, field,n0,n1,n2)
+     int it,n0,n1,n2;
+     char *varname;
+     double field[];
+{
+  int i,j,k;
+  float factor,offset;
+    
+  if (strcmp(varname,"CLOUD")==0) {
+    factor = 0.1;
+    offset = -50.;
+  }
+  else if (strcmp(varname,"U")==0) {
+    factor = 1.;
+    offset = 100.;
+  }
+  else if (strcmp(varname,"T")==0) {
+    factor = 0.5;
+    offset = -150.;
+  }
+    
+  for (k=0;k<n2;k++) {
+    for (j=0;j<n1;j++) {
+      for (i=0;i<n0;i++) {
+        field[k*(n0*n1)+j*n0+i] = (k*64 + j*16 + i*4 + it)*factor - offset;
+      }
+    }
+  }
+}
+
+void read_2d_input_files(it, varname, field, n0, n1)
+  int it,n0,n1;
+  char *varname;
+  double field[];
+{    
+  int i, j,k;
+  double factor, offset;
+  double tmp;
+  
+  if (strcmp(varname,"LATENT")==0){
+    factor = 1.;
+    offset = 120.;
+  }
+  else if (strcmp(varname,"TSURF")==0){
+    factor = 2.0;
+    offset = -230.;
+  }
+  else if (strcmp(varname,"SOIL_WET")==0){
+    factor = 10.;
+    offset = 0.;
+  }
+  else if (strcmp(varname,"PSURF")==0){
+    factor = 1.;
+    offset = -9.7e2;
+  }
+
+  for (j=0;j<n0;j++){
+    for (i=0;i<n1;i++) {
+      tmp = ((double)j*16. + (double)(i)*4. + (double)it)*factor - offset;
+      k= (n0-1-j)*n1+i;
+      field[k] = tmp;
+    }
+  }
+}
+
+int main()
+     /*
+/*   Purpose:   To serve as a generic example of an application that */
+/*       uses the "Climate Model Output Rewriter" (CMOR) */
+
+/*    CMOR writes CF-compliant netCDF files. */
+/*    Its use is strongly encouraged by the IPCC and is intended for use  */
+/*       by those participating in many community-coordinated standard  */
+/*       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE, */
+/*       etc.) */
+
+/*   Background information for this sample code: */
+
+/*      Atmospheric standard output requested by IPCC are listed in  */
+/*   tables available on the web.  Monthly mean output is found in */
+/*   tables A1a and A1c.  This sample code processes only two 3-d  */
+/*   variables listed in table A1c ("monthly mean atmosphere 3-D data"  */
+/*   and only four 2-d variables listed in table A1a ("monthly mean  */
+/*   atmosphere + land surface 2-D (latitude, longitude) data").  The  */
+/*   extension to many more fields is trivial. */
+
+/*      For this example, the user must fill in the sections of code that  */
+/*   extract the 3-d and 2-d fields from his monthly mean "history"  */
+/*   files (which usually contain many variables but only a single time  */
+/*   slice).  The CMOR code will write each field in a separate file, but  */
+/*   many monthly mean time-samples will be stored together.  These  */
+/*   constraints partially determine the structure of the code. */
+
+
+/*   Record of revisions: */
+
+/*       Date        Programmer(s)           Description of change */
+/*       ====        ==========              ===================== */
+/*      10/22/03     Rusty Koder              Original code */
+/*       1/28/04     Les R. Koder             Revised to be consistent */
+/*                                            with evolving code design */
+{
+
+  /*   dimension parameters: */
+  /* --------------------------------- */
+#define   ntimes  2    /* number of time samples to process */
+#define   lon  4       /* number of longitude grid cells   */
+#define   lat  3       /* number of latitude grid cells */
+#define   lev  5       /* number of standard pressure levels */
+#define   n2d  4       /* number of IPCC Table A1a fields to be */                                      /*     output. */
+#define n3d 3       /* number of IPCC Table A1c fields to  */
+                     /*                                be output.   */
+
+  /*   Tables associating the user's variables with IPCC standard output  */
+  /*   variables.  The user may choose to make this association in a  */
+  /*   different way (e.g., by defining values of pointers that allow him  */
+  /*   to directly retrieve data from a data record containing many  */
+  /*   different variables), but in some way the user will need to map his  */
+  /*   model output onto the Tables specifying the MIP standard output. */
+
+  /* ---------------------------------- */
+
+  /* My variable names for IPCC Table A1c fields */
+  char varin3d[n3d][6]={"CLOUD", "U", "T" };
+  
+  /* Units appropriate to my data */
+  char units3d[n3d][6]={"%", "m s-1", "K"};
+  
+  /* Corresponding IPCC Table A1c entry (variable name)  */
+  char entry3d[n3d][3]={"cl","ua","ta"};
+
+  /* My variable names for IPCC Table A1a fields */
+  char varin2d[n2d][9]={ "LATENT","TSURF","SOIL_WET","PSURF" };
+  
+  /* Units appropriate to my data */
+  char units2d[n2d][7]={ "W m-2","K","kg m-2","Pa"};
+  
+  char positive2d[n2d][4]={"down"," ", " ", " "};
+  
+  /* Corresponding IPCC Table A1a entry (variable name)  */
+  char entry2d[n2d][6]={"hfls", "tas","mrsos","ps"};
+
+/*  uninitialized variables used in communicating with CMOR: */
+/*  --------------------------------------------------------- */
+
+  int error_flag;
+  int znondim_id, zfactor_id;
+  int var2d_ids[n2d];
+  int var3d_ids[n3d];
+  double data2d[lat*lon];
+  double data3d[lev*lat*lon];
+  double alats[lat];
+  double alons[lon];
+ int ilats[lat];
+  int ilons[lon];
+  double   plevs[lev];
+  int   iplevs[lev];
+  long   lplevs[lev];
+  float   fplevs[lev];
+  double Time[2];
+  double  bnds_time[4];
+  double bnds_lat[lat*2];
+  double bnds_lon[lon*2];
+  double zlevs[lev];
+  double zlev_bnds[lev+1];
+
+  double a_coeff[lev]={ 0.1, 0.2, 0.3, 0.22, 0.1 };
+  double b_coeff[lev]={ 0.0, 0.1, 0.2, 0.5, 0.8 };
+  float p0= 1.e5;
+  double a_coeff_bnds[lev+1]={0.,.15, .25, .25, .16, 0.};
+  double b_coeff_bnds[lev+1]={0.,.05, .15, .35, .65, 1.};
+  int ilon, ilat, ipres, ilev, itim;
+  double dtmp,dtmp2;
+
+  /*  Other variables: */
+  /*  --------------------- */
+  
+  int it, m, i,ierr , j=400;
+  int myaxes[410];
+  int myaxes2[410];
+  int myvars[400];
+  char id[CMOR_MAX_STRING];
+  char units[CMOR_MAX_STRING];
+  char interval[CMOR_MAX_STRING];
+  char anames[25][CMOR_MAX_STRING];
+  char type;
+  char regions[5][16] = { "atlantic_ocean", "indian_ocean", "pacific_ocean", "global_ocean", "sf_bay"};
+  double timestest[5];
+  /* Externals funcs */
+  int tables[5];
+  char msg[555];
+  double bt=0.;
+  /* ================================ */
+  /*  Execution begins here: */
+  /* ================================ */
+  
+  /* Read coordinate information from model into arrays that will be passed  */
+  /*   to CMOR. */
+  /* Read latitude, longitude, and pressure coordinate values into  */
+  /*   alats, alons, and plevs, respectively.  Also generate latitude and  */
+  /*   longitude bounds, and store in bnds_lat and bnds_lon, respectively. */
+  /*   Note that all variable names in this code can be freely chosen by */
+  /*   the user. */
+  
+  /*   The user must write the subroutine that fills the coordinate arrays  */
+  /*   and their bounds with actual data.  The following line is simply a */
+  /*   a place-holder for the user's code, which should replace it. */
+  
+  /*  *** possible user-written call *** */
+  
+
+  
+  m = CMOR_EXIT_ON_MAJOR;
+  j = CMOR_REPLACE;
+  printf("ok mode is:%i\n",m);
+  i=0;
+  ierr = cmor_setup(NULL,&j,NULL,&m,NULL,&i);
+
+  read_coords(&alats[0], &alons[0], &iplevs[0], &bnds_lat[0], &bnds_lon[0],lon,lat,lev);
+  int tmpmo[12];
+  printf("Test code: ok init cmor\n");
+  char c1[CMOR_MAX_STRING];
+  char c2[CMOR_MAX_STRING];
+  strcpy(c1,"GICCM1\0");
+  strcpy(c2,"Nat, TO");
+
+
+  printf("yep: %s, %s\n",c1,c2);
+  ierr = cmor_dataset(
+       "Test",
+       "abrupt 4XCO2",
+       "GICC (Generic International Climate Center, Geneva, Switzerland)",
+       "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+       "standard",
+       1,
+       "Rusty Koder (koder at middle_earth.net)",
+       "Output from archive/giccm_03_std_2xCO2_2256.",
+       "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",
+       "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",
+       0,
+       0,
+       &tmpmo[0],&c1[0],&c2[0],3,0,"GICC","N/A",&bt);
+
+
+/*   cmor_set_cur_dataset_attribute("initialization_method","3",1); */
+  cmor_set_cur_dataset_attribute("physics_version","5",1);
+  printf("Test code: ok load cmor table(s)\n");
+  ierr = cmor_load_table("Test/CMIP5_Amons",&tables[0]);
+  strcpy(id,"time");
+  strcpy(units,"months since 1980");
+  strcpy(interval,"1 month");
+  j = 400;
+  for(i=0;i<j;i++) {
+    read_time(0, &Time[0], &bnds_time[0]);
+    read_time(1, &Time[1], &bnds_time[2]);
+    sprintf(units,"months since %i",1900+i);
+    ierr = cmor_axis(&myaxes[i],id,units,ntimes,&Time[0],'d',&bnds_time[0],2,interval);
+  }
+  
+  strcpy(id,"latitude");
+  strcpy(units,"degrees_north");
+  strcpy(interval,"");
+  ierr = cmor_axis(&myaxes[j],id,units,lat,&alats,'d',&bnds_lat,2,interval);
+  strcpy(id,"longitude");
+  strcpy(units,"degrees_east");
+  ierr = cmor_axis(&myaxes[j+1],id,units,lon,&alons,'d',&bnds_lon,2,interval);
+
+
+
+  dtmp = -999;
+  dtmp2=1.e-4;
+  myaxes2[1] = myaxes[j];
+  myaxes2[2] = myaxes[j+1];
+
+  printf("Test code: defining variables from table 1, %s\n",positive2d[0]);
+  for(i=0;i<j;i++) {
+    myaxes2[0] = myaxes[i];
+    sprintf(id,"hfls%i",i);
+    ierr = cmor_variable(&myvars[i],id,units2d[0],3,myaxes2,'d',NULL,&dtmp2,&positive2d[0][0],varin2d[0],"no history","no future");
+  }
+
+  for(m=0;m<j;m++) {
+    for (i=0;i<ntimes;i++) {
+      printf("Test code: writing time: %i of %i\n",i+1,ntimes);
+      printf("2d\n");
+      read_2d_input_files(i, varin2d[0], &data2d,lat,lon);
+      sprintf(id,"%i",i);
+      /*     ierr = cmor_write(myvars[0],&data2d,'d',id,1,&time,&bnds_time,NULL); */
+      /*     read_3d_input_files(i, varin3d[2], &data3d,lev,lat,lon); */
+      /*     ierr = cmor_write(myvars[1],&data3d,'d',id,1,&time,&bnds_time,NULL); */
+      /*     read_3d_input_files(i, varin3d[0], &data3d,5,lat,lon); */
+      /*     ierr = cmor_write(myvars[2],&data3d,'d',id,1,&time,&bnds_time,NULL); */
+      /*     read_2d_input_files(i, varin2d[3], &data2d,lat,lon); */
+      /*     ierr = cmor_write(myvars[3],&data2d,'d',id,1,&time,&bnds_time,&myvars[2]); */
+      printf("ok writing time %i for variable %i\n",i,m);
+      ierr = cmor_write(myvars[m],&data2d,'d',"",1,NULL,NULL,NULL);
+    }
+    ierr = cmor_close_variable(myvars[m],NULL,NULL);
+  }
+  ierr = cmor_close();
+  return 0;
+}
diff --git a/Test/test_lots_of_variables.f90 b/Test/test_lots_of_variables.f90
new file mode 100644
index 0000000..7458278
--- /dev/null
+++ b/Test/test_lots_of_variables.f90
@@ -0,0 +1,344 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+    
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+    
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          field(j,i) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n2d = 1       ! number of AMIP Table 2 fields to be
+                                      !     output.
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, PARAMETER :: ntest=400
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(n2d+ntest) :: var2d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(5) :: plevs
+  DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+    character (len=200) :: msg,msg2
+    bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+
+  error_flag  = cmor_set_cur_dataset_attribute("initialization_method","4")
+  error_flag  = cmor_set_cur_dataset_attribute("physics_version","6")
+
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining axes'
+  
+  axis2d_ids(1) = cmor_axis(  &
+       table='CMIP5_Amons',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids(2) = cmor_axis(  &
+       table='CMIP5_Amons',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis2d_ids(3) = cmor_axis(  &
+       table='CMIP5_Amons',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining axes'
+
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,ntest
+     write(msg,*)  m-1
+     msg2 = trim(entry2d(1)(1:4)//adjustl(msg))
+     print*,'Test Code: defining variable: :',msg2
+     var2d_ids(m) = cmor_variable(    &
+          table='CMIP5_Amons',  & 
+          table_entry=msg2,     & 
+!!$          file_suffix='1979-2001',    &
+          units=units2d(1),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(1),     &
+          original_name=varin2d(1))   
+  ENDDO
+
+  print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  DO m=1,ntest
+     time_loop: DO it=1, ntimes
+        
+        ! In the following loops over the 3d and 2d fields, the user-written    
+        ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+        ! the requested AMIP table 1a and table 2 fields and store them in 
+        ! data3d and data2d, respectively.  In addition a user-written code 
+        ! (read_time) retrieves the time and time-bounds associated with the 
+        ! time sample (in units of 'days since 1970-1-1', consistent with the 
+        ! axis definitions above).  The bounds are set to the beginning and 
+        ! the end of the month retrieved, indicating the averaging period.
+        
+        ! The user must write a code to obtain the times and time-bounds for
+        !   the time slice.  The following line is simply a place-holder for
+        !   the user's code, which should replace it.
+        
+        call read_time(it, time, bnds_time)
+        
+        ! Cycle through the 3-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        
+        
+        ! Cycle through the 2-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(1), data2d)                  
+        
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+             data =          RESHAPE(data2d, (/ lat*lon /)),        &
+             ntimes_passed = 1,              &
+             time_vals =     (/ time /),           &
+             time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+        print*, 'after writing variable, ', var2d_ids(m)
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO time_loop
+     error_flag = cmor_close(var2d_ids(m))
+  END DO
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/test_python_1D_var.py b/Test/test_python_1D_var.py
new file mode 100644
index 0000000..0509778
--- /dev/null
+++ b/Test/test_python_1D_var.py
@@ -0,0 +1,36 @@
+import cmor
+
+error_flag = cmor.setup(inpath='Test', netcdf_file_action=cmor.CMOR_REPLACE)
+
+error_flag = cmor.dataset(                                   
+       outpath='Test',                                         
+       experiment_id='noVolc2000',
+       institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+       source='GICCM1 (2002): ',
+       calendar='standard',                                      
+       realization=1,                                          
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+       comment='Equilibrium reached after 30-year spin-up ',                                 
+       references='Model described by Koder and Tolkien ',
+       model_id="pcmdi-10a", 
+       forcing="TO, SO, Nat",
+       ## month_lengths=[30,28,30,30,30,30,30,31,30,31,30,30],
+       ## leap_year=3,
+       ## leap_month=1,
+       parent_experiment_id="N/A",branch_time=0)
+
+cmor.load_table("Tables/CMIP5_Omon")
+itim = cmor.axis(  
+    table_entry='time',           
+    units='months since 2010-1-1',
+    coord_vals=[0,1,2,3,4,5,6,7,8,9,10,11],
+    cell_bounds=[0,1,2,3,4,5,6,7,8,9,10,11,12])
+
+ivar = cmor.variable('thetaoga',units='K',axis_ids=[itim,])
+
+data=[280.,]*12 # 12 months worth of data
+
+cmor.write(ivar,data)
+
+cmor.close()
diff --git a/Test/test_python_2Gb_file.py b/Test/test_python_2Gb_file.py
new file mode 100644
index 0000000..90b08b8
--- /dev/null
+++ b/Test/test_python_2Gb_file.py
@@ -0,0 +1,48 @@
+
+import cmor,numpy
+
+
+
+
+
+nlat = 360
+dlat = 180./nlat
+nlon = 720
+dlon = 360./nlon
+nlev = 17
+ntimes = 12
+
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+blats = numpy.arange(-90,90+dlat,dlat)
+lons = numpy.arange(0+dlon/2.,360.,dlon)
+blons = numpy.arange(0,360.+dlon,dlon)
+
+
+cmor.setup(inpath='.',netcdf_file_action=cmor.CMOR_REPLACE)
+cmor.dataset('historical', 'ukmo', 'HadCM3', 'gregorian',model_id='pcmdi-10b',outpath='Test',forcing='CH4', parent_experiment_id="lgm",branch_time=0)
+table='Tables/CMIP5_Amon'
+cmor.load_table(table)
+
+
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,cell_bounds=blats,units='degrees_north')
+ilon = cmor.axis(table_entry='longitude',coord_vals=lons,cell_bounds=blons,units='degrees_east')
+itim = cmor.axis(table_entry='time',units='months since 2010')#,coord_vals=numpy.arange(ntimes,dtype=numpy.float),cell_bounds=numpy.arange(ntimes+1,dtype=float),units='months since 2000')
+ilev = cmor.axis(table_entry='plevs',coord_vals=numpy.array([1000.,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10]),units='hPa')
+    
+axes=[itim,ilev,ilat,ilon]
+
+var = cmor.variable(table_entry='ta',units='K',axis_ids=axes)
+ntimes=180
+
+data = numpy.random.random((nlev,nlat,nlon))*30+273.15
+
+for i in range(ntimes):
+    if i%10==0 : print 'Writing time:',i
+    cmor.write(var,data,time_vals=numpy.array([float(i),]),time_bnds=numpy.array([i,i+1.]))
+
+print cmor.close(var_id=var,file_name=True)
+cmor.close()
+
+
+
+print 'hello'
diff --git a/Test/test_python_2Gb_slice.py b/Test/test_python_2Gb_slice.py
new file mode 100644
index 0000000..65431d9
--- /dev/null
+++ b/Test/test_python_2Gb_slice.py
@@ -0,0 +1,51 @@
+
+import cmor,numpy
+
+
+
+
+
+nlat = 3600
+dlat = 180./nlat
+nlon = 7200
+dlon = 360./nlon
+nlev = 24
+dlev = 1000./nlev
+ntimes = 1
+
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+blats = numpy.arange(-90,90+dlat,dlat)
+lons = numpy.arange(0+dlon/2.,360.,dlon)
+blons = numpy.arange(0,360.+dlon,dlon)
+
+levs = numpy.array([1000.,925,900,850,800,700,600,500,400,300,250,200,150,100,75,70,50,30,20,10,7.5,5,2.5,1])
+alllevs = numpy.arange(1000,0,-dlev).tolist()
+print len(alllevs)
+
+cmor.setup(inpath='.',netcdf_file_action=cmor.CMOR_REPLACE)
+cmor.dataset('historical', 'ukmo', 'HadCM3', 'gregorian',model_id='pcmdi-10b',outpath='Test',forcing='CH4', parent_experiment_id="lgm",branch_time=0)
+table='Tables/CMIP5_Amon'
+cmor.load_table(table)
+
+
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,cell_bounds=blats,units='degrees_north')
+ilon = cmor.axis(table_entry='longitude',coord_vals=lons,cell_bounds=blons,units='degrees_east')
+itim = cmor.axis(table_entry='time',units='months since 2010')#,coord_vals=numpy.arange(ntimes,dtype=numpy.float),cell_bounds=numpy.arange(ntimes+1,dtype=float),units='months since 2000')
+ilev = cmor.axis(table_entry='plevs',coord_vals=levs,units='hPa')
+    
+axes=[itim,ilev,ilat,ilon]
+
+var = cmor.variable(table_entry='ta',units='K',axis_ids=axes)
+
+data = numpy.random.random((nlev,nlat,nlon))*30+273.15
+
+for i in range(ntimes):
+    if i%10==0 : print 'Writing time:',i
+    cmor.write(var,data,time_vals=numpy.array([float(i),]),time_bnds=numpy.array([i,i+1.]))
+
+print cmor.close(var_id=var,file_name=True)
+cmor.close()
+
+
+
+print 'hello'
diff --git a/Test/test_python_YYYMMDDHH_exp_fmt.py b/Test/test_python_YYYMMDDHH_exp_fmt.py
new file mode 100644
index 0000000..fc92ae7
--- /dev/null
+++ b/Test/test_python_YYYMMDDHH_exp_fmt.py
@@ -0,0 +1,38 @@
+import cmor
+
+def path_test():
+    cmor.setup(inpath='Test',netcdf_file_action=cmor.CMOR_REPLACE)
+
+    cmor.dataset('mytest2010030812', 'ukmo', 'HadCM3', '360_day',
+                 institute_id="PCMDI",
+                 model_id='HadCM3',forcing='co2')
+    
+    table='CMIP5_Amon_YYYYMMDDHH'
+    cmor.load_table(table)
+    axes = [ {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              'coord_vals': [15],
+              'cell_bounds': [0, 30]
+              },
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [-1, 1]},             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             ]
+              
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+    varid = cmor.variable('ts', 'K', axis_ids)
+    cmor.write(varid, [273])
+    path=cmor.close(varid, file_name=True)
+
+    print "Saved file: ",path
+
+if __name__ == '__main__':
+    path_test()
diff --git a/Test/test_python_appending.py b/Test/test_python_appending.py
new file mode 100644
index 0000000..2f62cac
--- /dev/null
+++ b/Test/test_python_appending.py
@@ -0,0 +1,92 @@
+import cmor,numpy
+
+nlat = 90
+nlon = 180
+
+def mywrite(data = None, time_vals = None, append_to = None,cell_bounds=None):
+    breq = "100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.  0.".split()
+
+    bnds_req = []
+    for b in breq:
+        bnds_req.append(float(b))
+
+    bnds_req=numpy.array(bnds_req)
+    bnds_req.shape=(7,2)
+
+    print bnds_req[-2], bnds_req.shape
+
+    levs=[]
+
+    for b in bnds_req:
+        levs.append((b[0]+b[1])/2.)
+
+    levs=numpy.array(levs)
+
+    print levs
+
+    ipth="Test"
+    if append_to is None:
+        mode = cmor.CMOR_REPLACE
+    else:
+        mode = cmor.CMOR_APPEND
+    print 'Mode in python:',mode
+    cmor.setup(inpath=ipth,
+               set_verbosity=cmor.CMOR_NORMAL,
+               netcdf_file_action = mode,
+               logfile = None)
+
+    cmor.dataset(
+        outpath = ipth,
+        experiment_id = "lgm",
+        institution = "PCMDI",
+        source = "GICCM1 2002",
+        institute_id="PCMDI",
+        calendar = "standard",
+        contact="Pablo Sandoval",
+        model_id="GICCM1",forcing="Nat",parent_experiment_id="historical",branch_time=3.14159)
+
+    cmor.load_table("Tables/CMIP5_Amon")
+
+    dlat = 180/nlat
+    dlon = 360./nlon
+    lats = numpy.arange(-90+dlat/2.,90,dlat)
+    bnds_lat = numpy.arange(-90,90+dlat,dlat)
+    lons = numpy.arange(0+dlon/2.,360.,dlon)-180.
+    bnds_lon = numpy.arange(0,360.+dlon,dlon)-180.
+
+    plevs = numpy.array([100000., 92500., 85000., 70000.,
+                         60000., 50000., 40000., 30000., 25000., 20000.,
+                         15000., 10000., 7000., 5000., 3000., 2000., 1000.])
+
+    itim = cmor.axis(table_entry='time',units='month since 2008')
+    #itim = cmor.axis(table_entry='time',units='month since 2008',coord_vals=numpy.arange(0,12,1))
+    ilat = cmor.axis(table_entry='latitude',coord_vals=lats,units='degrees_north',cell_bounds=bnds_lat)
+    ilon = cmor.axis(table_entry='longitude',coord_vals=lons,units='degrees_east',cell_bounds=bnds_lon)
+    print 'so far',itim,ilat,ilon
+    ilev = cmor.axis(table_entry="plevs",coord_vals=plevs,units="Pa")
+
+    iv = cmor.variable(table_entry='ta',axis_ids=numpy.array((itim,ilev,ilat,ilon)),units='K')
+
+    #cmor.write(iv,data)
+    if append_to is None:
+        print 'time:',time_vals
+        print 'bnds:',cell_bounds
+        cmor.write(iv,data,time_vals=time_vals,time_bnds=cell_bounds)#,file_suffix="with-appending")
+    else:
+        print 'Ok writing with a suffix',append_to
+        cmor.write(iv,data,time_vals=time_vals,file_suffix=append_to,time_bnds=cell_bounds)
+        print 'and back'
+    file = cmor.close(iv,file_name=True)
+    print 'Ok dumped to:',file
+    cmor.close()
+    return file
+
+
+ntime = 12
+data = numpy.random.random((ntime,17,nlat,nlon))+280.
+
+
+f1 = mywrite(data = data[:6], time_vals = numpy.arange(0,6,1),cell_bounds=numpy.arange(0,7,1))
+print 'First part: ',f1
+f2 = mywrite(data = data[6:], time_vals = numpy.arange(6,12,1), cell_bounds=numpy.arange(6,13,1), append_to=f1)
+print f2
diff --git a/Test/test_python_bounds_request.py b/Test/test_python_bounds_request.py
new file mode 100644
index 0000000..e96cc8c
--- /dev/null
+++ b/Test/test_python_bounds_request.py
@@ -0,0 +1,59 @@
+import cmor,numpy
+
+breq = "100000. 80000. 80000. 68000. 68000. 56000. 56000. 44000. 44000. 31000. 31000. 18000. 18000.  0.".split()
+
+bnds_req = []
+for b in breq:
+    bnds_req.append(float(b))
+
+bnds_req=numpy.array(bnds_req)
+bnds_req.shape=(7,2)
+
+print bnds_req[-2], bnds_req.shape
+
+levs=[]
+
+for b in bnds_req:
+    levs.append((b[0]+b[1])/2.)
+
+levs=numpy.array(levs)
+
+print levs
+
+ipth="Test"
+cmor.setup(inpath=ipth,
+           set_verbosity=cmor.CMOR_NORMAL,
+           netcdf_file_action = cmor.CMOR_REPLACE,
+           logfile = None)
+
+cmor.dataset(
+    outpath = ipth,
+    experiment_id = "present-day control experiment",
+    institution = "PCMDI",
+    source = "PCMDI",
+    calendar = "standard",
+    model_id="pcmdi-09a",forcing="forcing")
+
+cmor.load_table("python_test_table_A")
+
+nlat = 90
+dlat = 180/nlat
+nlon = 180
+dlon = 360./nlon
+
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+lons = numpy.arange(0,360.,dlon)
+
+ntime = 12
+
+data = numpy.random.random((ntime,7,nlat,nlon))+280.
+
+itim = cmor.axis(table_entry='time',coord_vals=numpy.arange(0,ntime,1),units='month since 2008')
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,units='degrees_north')
+ilon = cmor.axis(table_entry='longitude',coord_vals=lons,units='degrees_east')
+print 'so far',itim,ilat,ilon
+ilev = cmor.axis(table_entry="pressure2",coord_vals=levs,cell_bounds=bnds_req,units="Pa")
+
+iv = cmor.variable(table_entry='ta',axis_ids=numpy.array((itim,ilev,ilat,ilon)),units='K')
+
+cmor.write(iv,data)
diff --git a/Test/test_python_common.py b/Test/test_python_common.py
new file mode 100644
index 0000000..579de2b
--- /dev/null
+++ b/Test/test_python_common.py
@@ -0,0 +1,164 @@
+import numpy
+# this test tries to mimic ippc_test_code.c but from python
+# This one is using direct C calls from python not the python around it
+ntimes=2
+lon=4
+lat=3
+lev=5
+lev2=17
+varin3d=["CLOUD", "U", "T" ];
+  
+#  /* Units appropriate to my data */
+units3d=["%", "m s-1", "K"];
+  
+#  /* Corresponding IPCC Table A1c entry (variable name)  */
+entry3d=["cl","ua","ta"];
+
+#  /* My variable names for IPCC Table A1a fields */
+varin2d=[ "LATENT","TSURF","SOIL_WET","PSURF" ];
+  
+#  /* Units appropriate to my data */
+units2d=[ "W m-2","K","kg m-2","Pa"];
+  
+positive2d=["down"," ", " ", " "];
+  
+#  /* Corresponding IPCC Table A1a entry (variable name)  */
+entry2d=["hfls", "tas","mrsos","ps"];
+
+
+def gen_irreg_grid(lon,lat):
+    lon0 = 280.
+    lat0=0.;
+    delta_lon = 10.;
+    delta_lat = 10.;
+    y = numpy.arange(lat)
+    x = numpy.arange(lon)
+    lon_coords = numpy.zeros((lat,lon))
+    lat_coords = numpy.zeros((lat,lon))
+    lon_vertices = numpy.zeros((lat,lon,4))
+    lat_vertices = numpy.zeros((lat,lon,4))
+
+    for j in range(lat): # really porr coding i know
+        for i in range(lon): # getting worse i know
+            lon_coords[j,i] = lon0+delta_lon*(j+1+i);
+            lat_coords[j,i] = lat0+delta_lat*(j+1-i);
+            lon_vertices[j,i,0] = lon_coords[j,i]-delta_lon;
+            lon_vertices[j,i,1] = lon_coords[j,i];
+            lon_vertices[j,i,2] = lon_coords[j,i]+delta_lon;
+            lon_vertices[j,i,3] = lon_coords[j,i];
+## !!$      /* vertices lat */
+            lat_vertices[j,i,0] = lat_coords[j,i];
+            lat_vertices[j,i,1] = lat_coords[j,i]-delta_lat;
+            lat_vertices[j,i,2] = lat_coords[j,i];
+            lat_vertices[j,i,3] = lat_coords[j,i]+delta_lat;
+    return x,y,lon_coords,lat_coords,lon_vertices,lat_vertices
+
+# read_data funcs are highly unoptimzed....
+def read_coords(lon,lat,lev):
+    alons = numpy.zeros(lon)
+    bnds_lon = numpy.zeros(2*lon)
+    alats = numpy.zeros(lat)
+    bnds_lat = numpy.zeros(2*lat)
+    plevs = numpy.zeros(lev,dtype='i')
+    for i in range(lon):
+        alons[i] = i*360./lon
+        bnds_lon[2*i] = (i - 0.5)*360./lon
+        bnds_lon[2*i+1] = (i + 0.5)*360./lon
+        
+    for i in range(lat):
+        alats[i] = (lat-i)*10
+        bnds_lat[2*i] = (lat-i)*10 + 5.
+        bnds_lat[2*i+1] = (lat-i)*10 - 5.
+        
+
+    plevs = numpy.array([100000., 92500., 85000., 70000.,
+                         60000., 50000., 40000., 30000., 25000., 20000.,
+                         15000., 10000., 7000., 5000., 3000., 2000., 1000.])
+
+    return alats, alons, plevs, bnds_lat, bnds_lon
+
+def read_time(it):
+    time = [0]
+    time_bnds=[0,0]
+    time[0] = (it-0.5)*30.;
+    time_bnds[0] = (it-1)*30.;
+    time_bnds[1] = it*30.;
+
+    time[0]=it;
+    time_bnds[0] = it;
+    time_bnds[1] = it+1;
+    return time[0],numpy.array(time_bnds)
+
+def read_3d_input_files(it, varname, n0, n1, n2, ntimes):
+    
+  if varname=="CLOUD":
+      factor = 0.1;
+      offset = -50.;
+  elif varname=="U":
+      factor = 1.
+      offset = 100.
+  elif varname=="T":
+      factor = 0.5;
+      offset = -150.;
+
+  field = numpy.zeros((n2,n1,n0),dtype='d')
+  for k in range(n2):
+    for j in range(n1):
+      for i in range(n0):
+	field[k,j,i] = (k*64 + j*16 + i*4 + it)*factor - offset;
+  return field
+
+
+def read_2d_input_files(it, varname, n0, n1):
+
+    if varname=="LATENT":
+        factor = 1.;
+        offset = 120.;
+    elif varname == "TSURF":
+        factor = 2.0;
+        offset = -230.;
+    elif varname=="SOIL_WET":
+        factor = 10.;
+        offset = 0.;
+    elif varname == "PSURF":
+        factor = 1.;
+        offset = -9.7e2;
+
+    field = numpy.zeros((n0,n1),dtype='d')
+
+    for j in range(n0):
+        for i in range(n1):
+            tmp = (j*16. + i*4. + it)*factor - offset;
+            field[j,i] = tmp;
+    return field
+
+alats, alons, plevs, bnds_lat, bnds_lon = read_coords(lon,lat,lev);
+
+Time = numpy.zeros(ntimes,dtype='d')
+bnds_time = numpy.zeros(ntimes*2,dtype='d')
+Time[0],bnds_time[0:2] = read_time(0)
+Time[1],bnds_time[2:4] = read_time(1)
+
+zlevs = numpy.zeros(5,dtype='d')
+zlevs[0]=0.1999999999999999999;
+zlevs[1]= 0.3;
+zlevs[2]=0.55;
+zlevs[3]= 0.7;
+zlevs[4] =  0.99999999;
+
+zlev_bnds    = numpy.zeros(6,dtype='d')
+zlev_bnds[0] = 0.
+zlev_bnds[1] = 0.2
+zlev_bnds[2] = 0.42
+zlev_bnds[3] = 0.62
+zlev_bnds[4] = 0.8
+zlev_bnds[5] = 1.
+
+regions = numpy.array(["atlantic_arctic_ocean", "indian_pacific_ocean", "pacific_ocean", "global_ocean", "sf_bay"])
+
+a_coeff=numpy.array([ 0.1, 0.2, 0.3, 0.22, 0.1 ])
+b_coeff=numpy.array([ 0.0, 0.1, 0.2, 0.5, 0.8 ])
+p0= numpy.array([1.e5,])
+a_coeff_bnds=numpy.array([0.,.15, .25, .25, .16, 0.])
+b_coeff_bnds=numpy.array([0.,.05, .15, .35, .65, 1.])
+
diff --git a/Test/test_python_direct_calls.py b/Test/test_python_direct_calls.py
new file mode 100644
index 0000000..c1b63a4
--- /dev/null
+++ b/Test/test_python_direct_calls.py
@@ -0,0 +1,120 @@
+from test_python_common import * # common subroutines
+import cmor._cmor
+import os
+
+pth = os.path.split(os.path.realpath(os.curdir))
+if pth[-1]=='Test':
+    ipth = opth = '.'
+else:
+    ipth = opth = 'Test'
+
+myaxes=numpy.zeros(9,dtype='i')
+myaxes2=numpy.zeros(9,dtype='i')
+myvars=numpy.zeros(9,dtype='i')
+
+cmor._cmor.setup(ipth,cmor.CMOR_REPLACE,cmor.CMOR_NORMAL,cmor.CMOR_EXIT_ON_MAJOR,"",1);
+cmor._cmor.dataset( \
+    ipth,\
+    "lgm",\
+    "GICC (Generic International Climate Center, Geneva, Switzerland)",\
+    "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",\
+    "standard",\
+    1,\
+    "Rusty Koder (koder at middle_earth.net)",\
+    "Output from archive/giccm_03_std_2xCO2_2256.",\
+    "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",\
+    "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",\
+    0,\
+    0,\
+    None,"GICCM1","Nat",0,0,"PCMDI","N/A",0)
+
+tables=[]
+a = cmor._cmor.load_table("Tables/CMIP5_Omon")
+tables.append(a)
+tables.append(cmor._cmor.load_table("Tables/CMIP5_Amon"))
+print 'Tables ids:',tables
+
+
+axes=[]
+id="time"
+units="months since 1980"
+myaxes[0] = cmor._cmor.axis(id,units,ntimes,Time,'d',bnds_time,2,"1 month")
+id='latitude'
+units="degrees_north"
+interval=""
+myaxes[1] = cmor._cmor.axis(id,units,lat,alats,'d',bnds_lat,2,interval)
+id="longitude"
+units="degrees_east"
+myaxes[2] = cmor._cmor.axis(id,units,lon,alons,'d',bnds_lon,2,interval)
+id="plevs"
+units="Pa"
+print plevs.astype("d")
+myaxes[3] = cmor._cmor.axis(id,units,lev2,plevs.astype("d"),'d',None,0,interval)
+
+
+myaxes[4] = cmor._cmor.axis("alternate_hybrid_sigma","1",5,zlevs,'d',zlev_bnds,1,interval)
+
+
+cmor.set_table(tables[0])
+myaxes[5] = cmor._cmor.axis( "basin","",4,regions,'c',None,21,interval)
+id='time'
+units='months since 1980'
+myaxes[7] = cmor._cmor.axis(id,units,ntimes,Time,'d',bnds_time,2,"1 month")
+id="latitude"
+units="degrees_north"
+interval=""
+myaxes[8] = cmor._cmor.axis(id,units,lat,alats,'d',bnds_lat,2,interval)
+
+cmor._cmor.set_table(tables[1])
+
+
+dtmp = -999;
+dtmp2=1.e-4;
+myaxes2[0] = myaxes[0];
+myaxes2[1] = myaxes[3];
+myaxes2[2] = myaxes[1];
+myaxes2[3] = myaxes[2];
+
+print 'ok doing the vars thing'
+myvars[0] = cmor._cmor.variable(entry2d[0],units2d[0],3,myaxes,'d',None,dtmp2,positive2d[0],varin2d[0],"no history","no future")
+print 'vars 2'
+myvars[1] = cmor._cmor.variable(entry3d[2],units3d[2],4,myaxes2,'d',None,dtmp2,"",varin3d[2],"no history","no future")
+print 'vars 2'
+
+myaxes2[1] = myaxes[4];
+myvars[2] = cmor._cmor.variable(entry3d[0],units3d[0],4,myaxes2,'d',None,dtmp2,"",varin3d[0],"no history","no future")
+
+print 'vars 2'
+
+print 'zfact',type(numpy.array(myaxes2[1])),type(myaxes2)
+
+myvars[3] = cmor._cmor.zfactor(int(myaxes2[1]),"p0","Pa",0,None,'d',p0,None)
+print 'zfact',myaxes2[1]
+myvars[3] = cmor._cmor.zfactor(int(myaxes2[1]),"b","",1,myaxes2[1],'d',b_coeff,b_coeff_bnds)
+print 'zfact',myaxes2[1]
+myvars[3] = cmor._cmor.zfactor(int(myaxes2[1]),"a","",1,myaxes2[1],'d',a_coeff,a_coeff_bnds)
+#/*   printf("defining ap\n"); */
+#/*   for(i=0;i<5;i++) {a_coeff[i]*=1.e3;printf("sending acoef: %i, %lf\n",i,a_coeff[i]);} */
+#/*   for(i=0;i<6;i++) {a_coeff_bnds[i]*=1.e5;printf("sending acoef: %i, %lf\n",i,a_coeff_bnds[i]);} */
+#/*   ierr = cmor_zfactor(&myvars[3],myaxes2[1],"ap","hPa",1,&myaxes2[1],'d',&a_coeff,&a_coeff_bnds); */
+print 'zfact before last'
+myvars[3] = cmor._cmor.zfactor(int(myaxes2[1]),"ps","hPa",3,myaxes,'d',None,None)
+print 'zfact last'
+
+#  /* ok here we decalre a variable for region axis testing */
+cmor.set_table(tables[0])
+myaxes2[0] = myaxes[7]
+myaxes2[1] = myaxes[5]
+myaxes2[2] = myaxes[8]
+
+myvars[4] = cmor._cmor.variable("htovgyre","W",3,myaxes2,'d',None,dtmp2,positive2d[0],varin2d[0],"no history","no future")
+
+cmor.set_table(tables[1])
+
+
+for i in range(ntimes):
+    data2d = read_2d_input_files(i, varin2d[0], lat,lon)
+    print 'writing time',i,data2d.shape,data2d,numpy.average(data2d)
+    cmor._cmor.write(myvars[0],numpy.ravel(data2d),data2d.dtype.char,"",1,None,None,None);
+
+cmor._cmor.close(None,0,0)
diff --git a/Test/test_python_index_coord.py b/Test/test_python_index_coord.py
new file mode 100644
index 0000000..7fabce0
--- /dev/null
+++ b/Test/test_python_index_coord.py
@@ -0,0 +1,44 @@
+import cmor,numpy
+
+ipth="Test"
+cmor.setup(inpath=ipth,
+           set_verbosity=cmor.CMOR_NORMAL,
+           netcdf_file_action = cmor.CMOR_REPLACE,
+           logfile = None)
+
+cmor.dataset(
+    outpath = ipth,
+    experiment_id = "lgm",
+    institution = "PCMDI",
+    source = "PCMDI",
+    calendar = "standard",
+    model_id="pcmdi-09a",forcing="forcing")
+
+cmor.load_table("Tables/CMIP5_Omon")
+
+nlat = 90
+dlat = 180/nlat
+nlon = 180
+dlon = 360./nlon
+nlev = 5
+
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+blats = numpy.arange(-90,90+dlat,dlat)
+lons = numpy.arange(0+dlon/2.,360.,dlon)
+blons = numpy.arange(0,360.+dlon,dlon)
+
+ntime = 12
+
+data = numpy.random.random((ntime,nlat,nlev,nlon))*5+273.
+
+itim = cmor.axis(table_entry='time',coord_vals=numpy.arange(0,ntime,1),units='month since 2008',cell_bounds=numpy.arange(0,ntime+1,1))
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,units='degrees_north',cell_bounds=blats)
+ilon = cmor.axis(table_entry='longitude',coord_vals=lons,units='degrees_east',cell_bounds=blons)
+ilev = cmor.axis(table_entry='depth_coord',length=5,cell_bounds=numpy.arange(-12000,0,2000),coord_vals=numpy.arange(-10000,0,2000),units="m")
+
+iv = cmor.variable(table_entry='thetao',axis_ids=numpy.array((itim,ilat,ilev,ilon)),units='K')
+
+cmor.write(iv,data)
+
+f1 = cmor.close(iv,file_name=True)
+print f1
diff --git a/Test/test_python_jamie.py b/Test/test_python_jamie.py
new file mode 100644
index 0000000..cf12ad5
--- /dev/null
+++ b/Test/test_python_jamie.py
@@ -0,0 +1,39 @@
+import cmor
+
+def path_test():
+    cmor.setup(inpath='../trunk/Tables',netcdf_file_action=cmor.CMOR_REPLACE)
+
+    cmor.dataset('historical', 'ukmo', 'HadCM3', '360_day',model_id='HadCM3',forcing='Nat',
+                 contact="J.T. Snow",
+                 institute_id="PCMDI",
+                 parent_experiment_id="N/A",branch_time=0)
+    
+    table='CMIP5_Amon'
+    cmor.load_table(table)
+    axes = [ {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              'coord_vals': [15],
+              'cell_bounds': [0, 30]
+              },
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [-1, 1]},             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             ]
+              
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+    varid = cmor.variable('ts', 'K', axis_ids)
+    cmor.write(varid, [273])
+    path=cmor.close(varid, file_name=True)
+
+    print path
+
+if __name__ == '__main__':
+    path_test()
diff --git a/Test/test_python_jamie_2.py b/Test/test_python_jamie_2.py
new file mode 100644
index 0000000..1634159
--- /dev/null
+++ b/Test/test_python_jamie_2.py
@@ -0,0 +1,43 @@
+import cmor
+
+def multi_call_test():
+    cmor.setup(inpath='Tables',netcdf_file_action=cmor.CMOR_REPLACE)
+
+    cmor.dataset('historical', 'ukmo', 'HadCM3', '360_day',
+                 institute_id="PCMDI",
+                 model_id='HadCM3',contact="Ron Nen",forcing='SO',parent_experiment_id="lgm",branch_time=0.)
+    
+    table='CMIP5_Amon'
+    cmor.load_table(table)
+    axes = [ {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              },
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [-1, 1]},             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             ]
+              
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+    varid = cmor.variable('ts', 'K', axis_ids)
+    cmor.write(varid, [273], time_vals = [15], time_bnds = [ [0,30] ])
+    print 'First write worked as expected'
+    try:
+        cmor.write(varid, [273], time_vals = [15], time_bnds = [ [0], [30] ])
+        raise Exception,"We shouldn't be getting in here"
+    except:
+        print 'Second write that should have failed did fail, good!'
+        pass
+    cmor.close(varid)
+    print 'Success'
+
+
+if __name__ == '__main__':
+    multi_call_test()
diff --git a/Test/test_python_jamie_3.py b/Test/test_python_jamie_3.py
new file mode 100644
index 0000000..209912a
--- /dev/null
+++ b/Test/test_python_jamie_3.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+import cmor
+import numpy
+
+def main():
+    
+    missing = -99.
+    cmor.setup(inpath='Tables',
+               netcdf_file_action = cmor.CMOR_REPLACE)
+    cmor.dataset('historical', 'ukmo', 'HadCM3', '360_day',
+                 institute_id = 'ukmo',
+                 forcing = 'Nat',
+                 model_id = 'HadCM3',
+                 contact="Bleachers 140",
+                 parent_experiment_id="lgm",branch_time=0.)
+
+    table = 'CMIP5_Amon'
+    cmor.load_table(table)
+    axes = [ {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              },
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [-1, 1]},             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             ]
+
+    values = numpy.array([missing], numpy.float32)
+    myma = numpy.ma.masked_values(values, missing)
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+    varid = cmor.variable('ts', 'K', axis_ids, missing_value = myma.fill_value)
+
+    cmor.write(varid, myma, time_vals = [15], time_bnds = [ [0,30] ])
+
+    cmor.close(varid)
+    
+if __name__ == '__main__':
+
+    main()
diff --git a/Test/test_python_jamie_4.py b/Test/test_python_jamie_4.py
new file mode 100644
index 0000000..237fdf0
--- /dev/null
+++ b/Test/test_python_jamie_4.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+import cmor
+import numpy
+
+def main():
+    
+    cmor.setup(inpath='Tables',
+               netcdf_file_action = cmor.CMOR_REPLACE)
+    cmor.dataset('historical', 'ukmo', 'HadCM3', '360_day',
+                 institute_id = 'ukmo',
+                 forcing = 'SO',
+                 model_id = 'HadCM3',contact="Dusty Baker (even though he was a Dodgers",
+                 parent_experiment_id="lgm",branch_time=0)
+
+    table = 'CMIP5_Amon'
+    cmor.load_table(table)
+    axes = [ {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              },
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [-1, 1]},             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             ]
+
+    values = numpy.array([0.], numpy.float32)
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+
+    for var, units in (('ts', 'K'),  ('ps', 'hPa')):
+        varid = cmor.variable(var,
+                              units,
+                              axis_ids,
+                              )
+
+        cmor.write(varid, values, time_vals = [15], time_bnds = [ [0,30] ])
+
+    cmor.close()
+    
+if __name__ == '__main__':
+
+    main()
diff --git a/Test/test_python_jamie_6.py b/Test/test_python_jamie_6.py
new file mode 100644
index 0000000..a332212
--- /dev/null
+++ b/Test/test_python_jamie_6.py
@@ -0,0 +1,169 @@
+import cmor,numpy
+
+error_flag = cmor.setup(inpath='Test', netcdf_file_action=cmor.CMOR_REPLACE)
+  
+error_flag = cmor.dataset(                                   
+       outpath='Test',                                         
+       experiment_id='noVolc2000',
+       institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+       source='GICCM1 (2002): ',
+       calendar='360_day',                                      
+       realization=1,                                          
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+       comment='Equilibrium reached after 30-year spin-up ',                                 
+       references='Model described by Koder and Tolkien ',
+       model_id="GICCM1", 
+        institute_id="PCMDI",
+       forcing="TO",
+       parent_experiment_id="lgm",branch_time=0)
+  
+
+# creates 1 degree grid
+nlat=180
+nlon=360
+alats = numpy.arange(180)-89.5
+bnds_lat = numpy.arange(181)-90
+alons=numpy.arange(360)+.5
+bnds_lon=numpy.arange(361)
+cmor.load_table("Tables/CMIP5_Amon")
+ilat = cmor.axis(  
+    table_entry='latitude',       
+    units='degrees_north',          
+    length=nlat,                   
+    coord_vals=alats,              
+    cell_bounds=bnds_lat)        
+
+ilon = cmor.axis(  
+    table_entry='longitude',      
+    length=nlon,                   
+    units='degrees_east',         
+    coord_vals=alons,             
+    cell_bounds=bnds_lon)      
+
+lev=5
+ntimes=12
+plevs = (numpy.arange(lev)+1)*1.E4
+
+
+itim = cmor.axis(  
+    table_entry='time',           
+    units='months since 2030-1-1',  
+    length=ntimes,                
+    interval='1 month')
+
+zlevs = numpy.array(( 0.1, 0.3, 0.55, 0.7, 0.9 ))
+zlev_bnds=numpy.array(( 0.,.2, .42, .62, .8, 1. ))
+table_entry='hybrid_height'
+if table_entry == 'hybrid_height':
+    ilev = cmor.axis(  
+        table_entry='hybrid_height',       
+        ##     table_entry='standard_sigma',       
+                                        ##     table_entry='standard_hybrid_sigma',       
+        units='m',
+        length=lev,                   
+        coord_vals=zlevs,             
+        cell_bounds=zlev_bnds)
+    
+    p0 = 0.5e4
+##   p0 = 1.e5
+##   a_coeff = (/ 0.1, 0.2, 0.3, 0.2, 0.1 /)
+    a_coeff = numpy.array(( 0.2, 0.4, 0.6, 0.8, 0.95 ))
+    b_coeff = numpy.array(( 0.0, 0.1, 0.2, 0.5, 0.8 ))
+    
+##  a_coeff_bnds=(/0.,.15, .25, .25, .15, 0./)
+    a_coeff_bnds=numpy.array((0.,.3, .5, .7, .9, 1.))
+    b_coeff_bnds=numpy.array((0.,.05, .15, .35, .65, 1.))
+    
+## error_flag = cmor.zfactor(  
+##     zaxis_id=ilev,                      
+##     zfactor_name='ptop',                  
+##     units='Pa',                         
+##     zfactor_values = p0)
+    
+    error_flag = cmor.zfactor(  
+        zaxis_id=ilev,                        
+        zfactor_name='b',
+        axis_ids= numpy.array( (ilev, )),                
+        zfactor_values = b_coeff,            
+        zfactor_bounds = b_coeff_bnds  )
+    
+##     error_flag = cmor.zfactor(  
+##         zaxis_id=ilev,                       
+##         zfactor_name='lev',                    
+##         axis_ids= numpy.array(( ilev, )),
+##         units='m',
+##         zfactor_values = a_coeff,            
+##         zfactor_bounds = a_coeff_bnds )
+    
+    data2d = numpy.random.random((180,360)).astype('f')*8000
+    
+    zfactor_id = cmor.zfactor(  
+        zaxis_id=ilev,                         
+        zfactor_name='orog',                     
+        axis_ids=numpy.array(( ilon, ilat )),
+        units='m' ,
+        zfactor_values = data2d)
+else:
+    print 'yep working case'
+    ilev = cmor.axis(  
+        table_entry='standard_sigma',       
+        units='1',
+        length=lev,                   
+        coord_vals=zlevs,             
+        cell_bounds=zlev_bnds)
+    
+    p0 = 0.5E4
+    a_coeff = numpy.array(( 0.2, 0.4, 0.6, 0.8, 0.95 ))
+    b_coeff = numpy.array(( 0.0, 0.1, 0.2, 0.5, 0.8 ))
+    
+    a_coeff_bnds=numpy.array((0.,.3, .5, .7, .9, 1.))
+    b_coeff_bnds=numpy.array((0.,.05, .15, .35, .65, 1.))
+    
+    error_flag = cmor.zfactor(  
+        zaxis_id=ilev,                      
+        zfactor_name='ptop',                  
+        units='Pa',                         
+        zfactor_values = p0)
+    
+    error_flag = cmor.zfactor(  
+        zaxis_id=ilev,                       
+        zfactor_name='sigma',                    
+        axis_ids= numpy.array(( ilev, )),
+        zfactor_values = a_coeff,            
+        zfactor_bounds = a_coeff_bnds )
+    
+    data2d = numpy.random.random((180,360)).astype('f')-97000.
+    
+    zfactor_id = cmor.zfactor(  
+        zaxis_id=ilev,                         
+        zfactor_name='ps',                     
+        axis_ids=numpy.array(( ilon, ilat, itim )),
+        units='Pa')
+
+
+var3d_ids = cmor.variable(    
+    table_entry='cl',     
+    units='%',           
+    axis_ids=numpy.array((ilev, ilon, ilat, itim)),
+    missing_value=1.0e28, 
+    original_name='cloud')
+
+
+  
+for it in range(ntimes):
+
+    time = numpy.array((it))
+    bnds_time = numpy.array((it,it+1))
+    data3d = numpy.random.random((5,360,180)).astype('f')*100.
+    
+    error_flag = cmor.write(                                  
+        var_id        = var3d_ids,                        
+        data          = data3d,                              
+        ntimes_passed = 1,                                   
+        time_vals     = time,                                
+        time_bnds     = bnds_time   )
+
+  
+error_flag = cmor.close()  
+
diff --git a/Test/test_python_jamie_7.py b/Test/test_python_jamie_7.py
new file mode 100644
index 0000000..19e2a89
--- /dev/null
+++ b/Test/test_python_jamie_7.py
@@ -0,0 +1,87 @@
+import cmor,numpy
+
+error_flag = cmor.setup(inpath='Test', netcdf_file_action=cmor.CMOR_REPLACE)
+  
+error_flag = cmor.dataset(                                   
+       outpath='Test',                                         
+       experiment_id='noVolc2000',
+       institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+       source='GICCM1 (2002): ',
+       calendar='360_day',                                      
+       realization=1,                                          
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+       comment='Equilibrium reached after 30-year spin-up ',                                 
+       references='Model described by Koder and Tolkien ',
+       model_id="GICCM1", 
+       institute_id="PCMDI",
+       forcing="Nat, SO",
+       parent_experiment_id="lgm",branch_time=3.14159)
+  
+
+# creates 1 degree grid
+nlat=18
+nlon=36
+alats = numpy.arange(180)-89.5
+bnds_lat = numpy.arange(181)-90
+alons=numpy.arange(360)+.5
+bnds_lon=numpy.arange(361)
+cmor.load_table("Tables/CMIP5_Amon")
+ilat = cmor.axis(  
+    table_entry='latitude',       
+    units='degrees_north',          
+    length=nlat,                   
+    coord_vals=alats,              
+    cell_bounds=bnds_lat)        
+
+ilon = cmor.axis(  
+    table_entry='longitude',      
+    length=nlon,                   
+    units='degrees_east',         
+    coord_vals=alons,             
+    cell_bounds=bnds_lon)      
+
+ntimes=12
+plevs = numpy.array([100000., 92500, 85000, 70000, 60000, 50000, 40000, 30000, 25000,
+   20000, 15000, 10000, 7000, 5000, 3000, 2000, 1000, 999, 998, 997, 996,
+   995, 994])
+
+
+itim = cmor.axis(  
+    table_entry='time',           
+    units='months since 2030-1-1',  
+    length=ntimes,                
+    interval='1 month')
+
+ilev = cmor.axis(  
+        table_entry='plevs',       
+        units='Pa',
+        coord_vals=plevs,             
+        cell_bounds=None)
+    
+
+var3d_ids = cmor.variable(    
+    table_entry='ta',     
+    units='K',           
+    axis_ids=numpy.array((ilev, ilon, ilat, itim)),
+    missing_value=numpy.array([1.0e28,],dtype=numpy.float32)[0], 
+    original_name='cloud')
+
+
+  
+for it in range(ntimes):
+
+    time = numpy.array((it))
+    bnds_time = numpy.array((it,it+1))
+    data3d = numpy.random.random((len(plevs),nlon,nlat))*30.+265.
+    data3d = data3d.astype('f')
+    error_flag = cmor.write(                                  
+        var_id        = var3d_ids,                        
+        data          = data3d,                              
+        ntimes_passed = 1,                                   
+        time_vals     = time,                                
+        time_bnds     = bnds_time   )
+
+  
+error_flag = cmor.close()  
+
diff --git a/Test/test_python_joerg_1.py b/Test/test_python_joerg_1.py
new file mode 100644
index 0000000..21b395e
--- /dev/null
+++ b/Test/test_python_joerg_1.py
@@ -0,0 +1,106 @@
+import cmor,numpy
+
+error_flag = cmor.setup(inpath='Test', netcdf_file_action=cmor.CMOR_REPLACE)
+  
+error_flag = cmor.dataset(                                   
+       outpath='Test',                                         
+       experiment_id='noVolc2000',
+       institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+       source='GICCM1 (2002): ',
+       calendar='360_day',                                      
+       realization=1,                                          
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+       comment='Equilibrium reached after 30-year spin-up ',                                 
+       references='Model described by Koder and Tolkien ',
+       model_id="pcmdi-10a", 
+       forcing="co2",
+       parent_experiment_id="lgm",branch_time=0)
+  
+
+# creates 1 degree grid
+nlat=180
+nlon=360
+alats = numpy.arange(180)-89.5
+bnds_lat = numpy.arange(181)-90
+alons=numpy.arange(360)+.5
+bnds_lon=numpy.arange(361)
+cmor.load_table("Tables/CMIP5_Amon")
+#cmor.load_table("Test/IPCC_table_A1")
+ilat = cmor.axis(  
+    table_entry='latitude',       
+    units='degrees_north',          
+    length=nlat,                   
+    coord_vals=alats,              
+    cell_bounds=bnds_lat)        
+
+ilon = cmor.axis(  
+    table_entry='longitude',      
+    length=nlon,                   
+    units='degrees_east',         
+    coord_vals=alons,             
+    cell_bounds=bnds_lon)      
+
+
+mlev_val= """
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000200    0.001650    0.006050    0.014750    0.028650
+   0.048250    0.073700    0.104950    0.141700    0.183550
+   0.229950    0.280200    0.333650    0.389650    0.447450
+   0.506300    0.565500    0.624350    0.682100    0.738000
+   0.791300    0.841100    0.886350    0.925950    0.958600
+   0.982650    0.996150""".split()
+
+levs=[]
+for l in mlev_val:
+    levs.append(float(l))
+    
+BS_bnds= """
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000000    0.000000    0.000000    0.000000
+   0.000000    0.000400    0.002900    0.009200    0.020300
+   0.037000    0.059500    0.087900    0.122000    0.161400
+   0.205700    0.254200    0.306200    0.361100    0.418200
+   0.476700    0.535900    0.595100    0.653600    0.710600
+   0.765400    0.817200    0.865000    0.907700    0.944200
+   0.973000    0.992300    1.000000
+""".split()
+levs_bnds = []
+for l in BS_bnds:
+    levs_bnds.append(float(l))
+
+
+levs=numpy.array(levs)
+levs_bnds=numpy.array(levs_bnds)
+nlevs = len(levs)
+
+ntimes=12
+
+
+itim = cmor.axis(  
+    table_entry='time',           
+    units='months since 2030-1-1',  
+    length=ntimes,                
+    interval='1 month')
+
+zlevs = numpy.array(( 0.1, 0.3, 0.55, 0.7, 0.9 ))
+zlev_bnds=numpy.array(( 0.,.2, .42, .62, .8, 1. ))
+table_entry='alternate_hybrid_sigma'
+
+## for i in range(nlevs):
+##     print i,levs_bnds[i],levs[i],levs_bnds[i+1]
+##     if not (levs_bnds[i]<=levs[i]<=levs_bnds[i+1]) :
+##         print 'Yikes'
+
+ilev = cmor.axis(  
+    table_entry=table_entry,
+    units='',
+    length=nlevs,                   
+    coord_vals=levs,             
+    cell_bounds=levs_bnds)
+
diff --git a/Test/test_python_joerg_2.py b/Test/test_python_joerg_2.py
new file mode 100644
index 0000000..97949f0
--- /dev/null
+++ b/Test/test_python_joerg_2.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+import cmor
+import numpy
+
+
+def test_mode(mode,i,suffix=''):
+    cmor.setup(inpath='Tables',
+               netcdf_file_action = mode)
+    cmor.dataset('pre-industrial control', 'ukmo', 'HadCM3', '360_day',
+                 institute_id = 'ukmo',
+                 model_id = 'HadCM3',
+                 forcing="TO",
+                 contact="Derek Jeter",
+                 history = 'some global history',
+                 parent_experiment_id="lgm",branch_time=0)
+    
+    table = 'CMIP5_Amon'
+    cmor.load_table(table)
+    levels = [100000.,
+              92500.,
+              85000.,
+              70000.,
+              60000.,
+              50000.,
+              40000.,
+              30000.,
+              25000.,
+              20000.,
+              15000.,
+              10000.,
+              7000.,
+              5000.,
+              3000.,
+              2000.,
+              1000.,
+              999,
+              998,
+              997,
+              996,
+              995,
+              994]
+    
+    axes = [ {'table_entry': 'time',
+              'units': 'months since 2000-01-01 00:00:00',
+              },
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [-1, 1]},             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             {'table_entry': 'plevs',
+              'units': 'Pa',
+              'coord_vals': levels},
+             ]
+    
+    values = numpy.array(range(len(levels)), numpy.float32)
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+
+    for var, units in (('ta', 'K'),):
+        varid = cmor.variable(var,
+                              units,
+                              axis_ids,
+                              history = 'variable history',
+                              missing_value = -99
+                              )
+        print 'suffix is:',suffix
+        cmor.write(varid, values, time_vals = [i], time_bnds = [ [i,i+1] ],file_suffix=suffix)
+
+    fnm = cmor.close(varid,file_name=True)
+    cmor.close()
+    return fnm
+    
+fnm=''
+for i in range(5):
+    print i,fnm
+    fnm = test_mode(cmor.CMOR_APPEND,i,fnm)
+
diff --git a/Test/test_python_joerg_3.py b/Test/test_python_joerg_3.py
new file mode 100644
index 0000000..bfd3a9a
--- /dev/null
+++ b/Test/test_python_joerg_3.py
@@ -0,0 +1,149 @@
+import cmor,numpy
+
+ntimes=1
+nlat=45
+nlon=90
+nlev=5
+
+def prep(mode):
+    error_flag = cmor.setup(inpath='Test', netcdf_file_action=mode                       )
+
+    error_flag = cmor.dataset(                                   
+           outpath='Test',                                         
+           experiment_id='noVolc2000',
+           institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+           source='GICCM1 (2002): ',
+           calendar='standard',                                      
+           realization=1,                                          
+           contact = 'Rusty Koder (koder at middle_earth.net) ',      
+           history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+           comment='Equilibrium reached after 30-year spin-up ',                                 
+           references='Model described by Koder and Tolkien ',
+           institute_id="PCMDI",
+           model_id="GICCM1", 
+           forcing="TO, SO, Nat",
+           ## month_lengths=[30,28,30,30,30,30,30,31,30,31,30,30],
+           ## leap_year=3,
+           ## leap_month=1,
+           parent_experiment_id="N/A",branch_time=1)
+
+def prep_var(var,units):
+    # creates 1 degree grid
+    dlat = 180/nlat
+    dlon = 360./nlon
+    alats = numpy.arange(-90+dlat/2.,90,dlat)
+    bnds_lat = numpy.arange(-90,90+dlat,dlat)
+    alons = numpy.arange(0+dlon/2.,360.,dlon)-180.
+    bnds_lon = numpy.arange(0,360.+dlon,dlon)-180.
+    cmor.load_table("Tables/CMIP5_6hrLev")
+    #cmor.load_table("Test/IPCC_table_A1")
+    ilat = cmor.axis(  
+        table_entry='latitude',       
+        units='degrees_north',          
+        length=nlat,                   
+        coord_vals=alats,              
+        cell_bounds=bnds_lat)        
+
+    ilon = cmor.axis(  
+        table_entry='longitude',      
+        length=nlon,                   
+        units='degrees_east',         
+        coord_vals=alons,             
+        cell_bounds=bnds_lon)      
+
+
+    zlevs = numpy.zeros(5,dtype='d')
+    zlevs[0]=0.1999999999999999999;
+    zlevs[1]= 0.3;
+    zlevs[2]=0.55;
+    zlevs[3]= 0.7;
+    zlevs[4] =  0.99999999;
+
+    zlev_bnds    = numpy.zeros(6,dtype='d')
+    zlev_bnds[0] = 0.
+    zlev_bnds[1] = 0.2
+    zlev_bnds[2] = 0.42
+    zlev_bnds[3] = 0.62
+    zlev_bnds[4] = 0.8
+    zlev_bnds[5] = 1.
+
+
+
+    itim = cmor.axis(  
+        table_entry='time1',           
+        units='days since 2010-1-1')
+
+    ilev = cmor.axis(  
+        table_entry="alternate_hybrid_sigma",
+        units='1',
+        coord_vals=zlevs,             
+        cell_bounds=zlev_bnds)
+
+
+    p0= numpy.array([1.e5,])
+    a_coeff=numpy.array([ 0.1, 0.2, 0.3, 0.22, 0.1 ])
+    b_coeff=numpy.array([ 0.0, 0.1, 0.2, 0.5, 0.8 ])
+    a_coeff_bnds=numpy.array([0.,.15, .25, .25, .16, 0.])
+    b_coeff_bnds=numpy.array([0.,.05, .15, .35, .65, 1.])
+
+
+    ierr = cmor.zfactor(zaxis_id=ilev,
+                     zfactor_name='ap',
+                     units='Pa',
+                     axis_ids=[ilev,],
+                     zfactor_values=a_coeff,
+                     zfactor_bounds=a_coeff_bnds)
+
+
+    ierr = cmor.zfactor(zaxis_id=ilev,
+                     zfactor_name='b',
+                     axis_ids=[ilev,],
+                     zfactor_values=b_coeff,
+                     zfactor_bounds=b_coeff_bnds)
+
+
+    ## ierr = cmor.zfactor(zaxis_id=ilev,
+    ##                  zfactor_name='p0',
+    ##                  units='Pa',
+    ##                  zfactor_values=p0)
+
+    ips = cmor.zfactor(zaxis_id=ilev,
+                     zfactor_name='ps',
+                     axis_ids=[itim,ilat,ilon],
+                     units='Pa')
+
+    ivar1 =cmor.variable(var,axis_ids=[itim,ilev,ilat,ilon],units=units,missing_value=0.)
+    return ivar1,ips
+
+file_suffix1=''
+file_suffix2=''
+for d in range(2):
+    mode = cmor.CMOR_APPEND
+    if d==0: mode = cmor.CMOR_REPLACE
+    prep(mode)
+    ivar1,ips1=prep_var("ta","K")
+    ivar2,ips2=prep_var("hus","%")
+    for i in range(4):
+        tval = [i/4.+d]
+        tbnd = [i/4.+d-.125,i/4.+d+.125]
+        print 'writing time:',i,i/4.,file_suffix1
+        data=numpy.random.random((ntimes,nlev,nlat,nlon))*30.+273
+        data=data.astype("f")
+        cmor.write(ivar1,data,time_vals=tval,time_bnds=tbnd,file_suffix=file_suffix1)
+        print 'wrote var 1 time:',i
+        data=numpy.random.random((ntimes,nlev,nlat,nlon))*100.
+        data=data.astype("f")
+        cmor.write(ivar2,data,time_vals=tval,time_bnds=tbnd,file_suffix=file_suffix2)
+        print 'wrote var 2 time:',i
+        data=numpy.random.random((ntimes,nlat,nlon))*50.+101300.
+        data=data.astype("f")
+        cmor.write(ips1,data,store_with=ivar1,ntimes_passed=1,time_vals=tval,time_bnds=tbnd)
+        print 'wrote ps in var 1 time:',i
+        cmor.write(ips2,data,store_with=ivar2,ntimes_passed=1,time_vals=tval,time_bnds=tbnd)
+        print 'wrote ps in var 2 time:',i
+    file_suffix1=cmor.close(ivar1,True)
+    file_suffix2=cmor.close(ivar2,True)
+    print 'File:',file_suffix1,file_suffix2
+    cmor.close()
+print cmor.close(ivar1,True)
+cmor.close()
diff --git a/Test/test_python_max_variables.py b/Test/test_python_max_variables.py
new file mode 100644
index 0000000..6ac1d97
--- /dev/null
+++ b/Test/test_python_max_variables.py
@@ -0,0 +1,90 @@
+import cmor,numpy
+
+error_flag = cmor.setup(inpath='Test', netcdf_file_action=cmor.CMOR_REPLACE)
+  
+error_flag = cmor.dataset(                                   
+       outpath='Test',                                         
+       experiment_id='noVolc2000',
+       institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+       source='GICCM1 (2002): ',
+       calendar='360_day',                                      
+       realization=1,                                          
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+       comment='Equilibrium reached after 30-year spin-up ',                                 
+       references='Model described by Koder and Tolkien ',
+       model_id="GICCM1", 
+       forcing="Nat, SO",
+       institute_id='pcmdi',
+       parent_experiment_id="lgm",branch_time=3.14159)
+  
+
+# creates 10 degree grid
+nlat=18
+nlon=36
+alats = numpy.arange(180)-89.5
+bnds_lat = numpy.arange(181)-90.
+alons=numpy.arange(360)+.5
+bnds_lon=numpy.arange(361)
+cmor.load_table("Tables/CMIP5_Amon")
+ilat = cmor.axis(  
+    table_entry='latitude',       
+    units='degrees_north',          
+    length=nlat,                   
+    coord_vals=alats,              
+    cell_bounds=bnds_lat)        
+
+ilon = cmor.axis(  
+    table_entry='longitude',      
+    length=nlon,                   
+    units='degrees_east',         
+    coord_vals=alons,             
+    cell_bounds=bnds_lon)      
+
+ntimes=600
+plevs = numpy.array([100000., 92500, 85000, 70000, 60000, 50000, 40000, 30000, 25000,
+   20000, 15000, 10000, 7000, 5000, 3000, 2000, 1000, 999, 998, 997, 996,
+   995, 994])
+
+
+itim = cmor.axis(  
+    table_entry='time',           
+    units='months since 2030-1-1',  
+    length=ntimes,                
+    interval='1 month')
+
+ilev = cmor.axis(  
+        table_entry='plevs',       
+        units='Pa',
+        coord_vals=plevs,             
+        cell_bounds=None)
+
+  
+for it in range(ntimes):
+
+
+    var3d_ids = cmor.variable(    
+        table_entry='ta',     
+        units='K',
+        comment='My wise comments here',
+        axis_ids=numpy.array((ilev, ilon, ilat, itim)),
+        missing_value=numpy.array([1.0e28,],dtype=numpy.float32)[0], 
+        original_name='cloud')
+
+    time = numpy.array((it))
+    bnds_time = numpy.array((it,it+1))
+    data3d = numpy.random.random((len(plevs),nlon,nlat))*30.+265.
+    data3d = data3d.astype('f')
+    error_flag = cmor.write(                                  
+        var_id        = var3d_ids,                        
+        data          = data3d,                              
+        ntimes_passed = 1,                                   
+        time_vals     = time,                                
+        time_bnds     = bnds_time   )
+
+    cmor.close(var3d_ids)
+    
+
+  
+error_flag = cmor.close()  
+
diff --git a/Test/test_python_max_variables_2.py b/Test/test_python_max_variables_2.py
new file mode 100644
index 0000000..b603c54
--- /dev/null
+++ b/Test/test_python_max_variables_2.py
@@ -0,0 +1,96 @@
+import cmor,numpy
+
+error_flag = cmor.setup(inpath='Test', netcdf_file_action=cmor.CMOR_REPLACE)
+  
+error_flag = cmor.dataset(                                   
+       outpath='Test',                                         
+       experiment_id='noVolc2000',
+       institution= 'GICC (Generic International Climate Center, Geneva, Switzerland)',                                 
+       source='GICCM1 (2002): ',
+       calendar='360_day',                                      
+       realization=1,                                          
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', 
+       comment='Equilibrium reached after 30-year spin-up ',                                 
+       references='Model described by Koder and Tolkien ',
+       model_id="GICCM1", 
+       forcing="Nat, SO",
+       institute_id='pcmdi',
+       parent_experiment_id="lgm",branch_time=3.14159)
+  
+
+# creates 10 degree grid
+nlat=18
+nlon=36
+alats = numpy.arange(180)-89.5
+bnds_lat = numpy.arange(181)-90.
+alons=numpy.arange(360)+.5
+bnds_lon=numpy.arange(361)
+cmor.load_table("Tables/CMIP5_Amon")
+ilat = cmor.axis(  
+    table_entry='latitude',       
+    units='degrees_north',          
+    length=nlat,                   
+    coord_vals=alats,              
+    cell_bounds=bnds_lat)        
+
+ilon = cmor.axis(  
+    table_entry='longitude',      
+    length=nlon,                   
+    units='degrees_east',         
+    coord_vals=alons,             
+    cell_bounds=bnds_lon)      
+
+ntimes=600
+plevs = numpy.array([100000., 92500, 85000, 70000, 60000, 50000, 40000, 30000, 25000,
+   20000, 15000, 10000, 7000, 5000, 3000, 2000, 1000, 999, 998, 997, 996,
+   995, 994])
+
+
+itim = cmor.axis(  
+    table_entry='time',           
+    units='months since 2030-1-1',  
+    length=ntimes,                
+    interval='1 month')
+
+ilev = cmor.axis(  
+        table_entry='plevs',       
+        units='Pa',
+        coord_vals=plevs,             
+        cell_bounds=None)
+
+var3d_ids = cmor.variable(    
+    table_entry='ta',     
+    units='K',           
+    axis_ids=numpy.array((ilev, ilon, ilat, itim)),
+    missing_value=numpy.array([1.0e28,],dtype=numpy.float32)[0], 
+    original_name='cloud')
+
+  
+for it in range(ntimes):
+    
+    time = numpy.array((it))
+    bnds_time = numpy.array((it,it+1))
+    data3d = numpy.random.random((len(plevs),nlon,nlat))*30.+265.
+    data3d = data3d.astype('f')
+    error_flag = cmor.write(                                  
+        var_id        = var3d_ids,                        
+        data          = data3d,                              
+        ntimes_passed = 1,                                   
+        time_vals     = time,                                
+        time_bnds     = bnds_time   )
+
+    if (it == ntimes-1) :
+        fnm = cmor.close(var3d_ids, True)
+        print it,fnm
+    else:
+        if (it%50)== 0:
+            fnm , var3d_ids = cmor.close(var3d_ids, True, True)
+            print it,fnm
+        else:
+            var3d_ids = cmor.close(var3d_ids, False, True)
+
+
+  
+error_flag = cmor.close()  
+
diff --git a/Test/test_python_memory_check.py b/Test/test_python_memory_check.py
new file mode 100644
index 0000000..17dc6cb
--- /dev/null
+++ b/Test/test_python_memory_check.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python
+
+'''
+Note the memory size from repeated calls to cmor
+
+Memory stats are taken from http://code.activestate.com/recipes/286222/
+'''
+
+import os
+
+_proc_status = '/proc/%d/status' % os.getpid()
+
+_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
+          'KB': 1024.0, 'MB': 1024.0*1024.0}
+
+def _VmB(VmKey):
+    '''Private.
+    '''
+    global _proc_status, _scale
+     # get pseudo file  /proc/<pid>/status
+    try:
+        t = open(_proc_status)
+        v = t.read()
+        t.close()
+    except:
+        return 0.0  # non-Linux?
+     # get VmKey line e.g. 'VmRSS:  9999  kB\n ...'
+    i = v.index(VmKey)
+    v = v[i:].split(None, 3)  # whitespace
+    if len(v) < 3:
+        return 0.0  # invalid format?
+     # convert Vm value to bytes
+    return float(v[1]) * _scale[v[2]]
+
+
+def memory(since=0.0):
+    '''Return memory usage in bytes.
+    '''
+    return _VmB('VmSize:') - since
+
+
+def resident(since=0.0):
+    '''Return resident memory usage in bytes.
+    '''
+    return _VmB('VmRSS:') - since
+
+
+def stacksize(since=0.0):
+    '''Return stack size in bytes.
+    '''
+    return _VmB('VmStk:') - since
+
+import cmor
+import sys
+
+def memory_usage(fhd,mem=0,res=0,stk=0):
+    nmem = memory()
+    nres = resident()
+    nstk = stacksize()
+    fhd.write( 'memory: %s\t%i\t\t%i\t\t%i\n' % (nmem,memory(mem), resident(res), stacksize(stk)))
+    return nmem,nres,nstk
+
+def memory_check():
+    cmor.setup(inpath='Tables',netcdf_file_action=cmor.CMOR_REPLACE)
+
+    cmor.dataset('historical', 'ukmo', 'HadCM3', '360_day',
+                 institute_id="PCMDI",
+                 model_id='HadCM3',forcing='TO',parent_experiment_id="lgm",branch_time=0.,contact="Willie Mays")
+    
+    table='CMIP5_Amon'
+    cmor.load_table(table)
+
+    tval = []
+    tbounds=[]
+
+    passtime = True
+    ntimes = 1200
+    for time in range(ntimes):
+        tval.append(15 + time*30)
+        tbounds.append([time*30, (time + 1)*30])
+
+    if passtime:
+        timdef = {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              }
+    else:
+        timdef = {'table_entry': 'time',
+              'units': 'days since 2000-01-01 00:00:00',
+              'coord_vals' : tval,
+              'cell_bounds' : tbounds,
+              }
+        
+    axes = [ timdef,
+             {'table_entry': 'latitude',
+              'units': 'degrees_north',
+              'coord_vals': [0],
+              'cell_bounds': [[-1,1],],
+              },             
+             {'table_entry': 'longitude',
+              'units': 'degrees_east',
+              'coord_vals': [90],
+              'cell_bounds': [89, 91]},
+             ]
+              
+    axis_ids = list()
+    for axis in axes:
+        axis_id = cmor.axis(**axis)
+        axis_ids.append(axis_id)
+    varid = cmor.variable('ts', 'K', axis_ids)
+
+    mem = 0
+    res = 0
+    stk = 0
+    memi,resi,stki = memory_usage(sys.stdout)
+    
+    for time in range(ntimes):
+        a = [273]
+        if passtime:
+            tval = [15 + time*30]
+            tbounds = [time*30, (time + 1)*30]
+            cmor.write(varid, [273], time_vals = tval, time_bnds = tbounds)
+        else:
+            cmor.write(varid, [273])
+        mem,res,stk = memory_usage(sys.stdout,mem,res,stk)
+        #mem,res,stk = memory_usage(sys.stdout,memi,resi,stki)
+        print '---'
+    
+    cmor.close(varid)
+
+if __name__ == '__main__':
+    memory_check()
diff --git a/Test/test_python_new_tables.py b/Test/test_python_new_tables.py
new file mode 100644
index 0000000..e924633
--- /dev/null
+++ b/Test/test_python_new_tables.py
@@ -0,0 +1,41 @@
+import cmor,numpy
+
+ipth="Test"
+cmor.setup(inpath=ipth,
+           set_verbosity=cmor.CMOR_NORMAL,
+           netcdf_file_action = cmor.CMOR_REPLACE,
+           logfile = None)
+
+cmor.dataset(
+    outpath = ipth,
+    experiment_id = "lgm",
+    institution = "PCMDI",
+    source = "GICCM1 2002",
+    institute_id="PCMDI",
+    calendar = "standard",
+    contact="Bengie Molina",
+    model_id="GICCM1",forcing="SO",parent_experiment_id="historical",branch_time=0.)
+
+cmor.load_table("Tables/CMIP5_Amon")
+
+nlat = 90
+dlat = 180/nlat
+nlon = 180
+dlon = 360./nlon
+
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+blats = numpy.arange(-90,90+dlat,dlat)
+lons = numpy.arange(0+dlon/2.,360.,dlon)
+blons = numpy.arange(0,360.+dlon,dlon)
+
+ntime = 12
+
+data = numpy.random.random((ntime,nlat,nlon))+280.
+
+itim = cmor.axis(table_entry='time',coord_vals=numpy.arange(0,ntime,1),units='month since 2008',cell_bounds=numpy.arange(0,ntime+1,1))
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,units='degrees_north',cell_bounds=blats)
+ilon = cmor.axis(table_entry='longitude',coord_vals=lons,units='degrees_east',cell_bounds=blons)
+
+iv = cmor.variable(table_entry='tas',axis_ids=numpy.array((itim,ilat,ilon)),units='K')
+
+cmor.write(iv,data)
diff --git a/Test/test_python_open_close_cmor_multiple.py b/Test/test_python_open_close_cmor_multiple.py
new file mode 100644
index 0000000..4b67e45
--- /dev/null
+++ b/Test/test_python_open_close_cmor_multiple.py
@@ -0,0 +1,59 @@
+
+import cmor,numpy
+
+
+
+vars ={'hfls' : ['W.m-2',1.,0.],'tas':['K',25,273.15],'clt':['%',100.,0.],'ta':['K',25,273.15]}
+
+
+nlat = 90
+dlat = 180/nlat
+nlon = 180
+dlon = 360./nlon
+nlev = 17
+ntimes = 12
+
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+blats = numpy.arange(-90,90+dlat,dlat)
+lons = numpy.arange(0+dlon/2.,360.,dlon)
+blons = numpy.arange(0,360.+dlon,dlon)
+
+
+tvars=['hfls','tas','clt','ta']
+
+
+cmor.setup(inpath='.',netcdf_file_action=cmor.CMOR_REPLACE)
+cmor.dataset('historical', 'ukmo', 'HadCM3', 'gregorian',
+             model_id='HadCM3',outpath='Test',forcing='TO, Nat',
+             institute_id="PCMDI",
+             contact="Matt Cain",parent_experiment_id="lgm",branch_time=0)
+table='Tables/CMIP5_Amon'
+cmor.load_table(table)
+
+for var in tvars:
+    ilat = cmor.axis(table_entry='latitude',coord_vals=lats,cell_bounds=blats,units='degrees_north')
+    ilon = cmor.axis(table_entry='longitude',coord_vals=lons,cell_bounds=blons,units='degrees_east')
+    itim = cmor.axis(table_entry='time',coord_vals=numpy.arange(ntimes,dtype=numpy.float),cell_bounds=numpy.arange(ntimes+1,dtype=float),units='months since 2000')
+    ilev = cmor.axis(table_entry='plevs',coord_vals=numpy.array([1000.,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10]),units='hPa')
+    
+    if var!='ta':
+        axes = [itim,ilat,ilon]
+        data = numpy.random.random((ntimes,nlat,nlon))*vars[var][1]+vars[var][2]
+    else:
+        axes=[itim,ilev,ilat,ilon]
+        data = numpy.random.random((ntimes,nlev,nlat,nlon))*vars[var][1]+vars[var][2]
+
+    kw={}
+    if var in ['hfss','hfls']:
+        kw['positive']='up'
+    var = cmor.variable(table_entry=var,units=vars[var][0],axis_ids=axes,**kw)
+
+    cmor.write(var,data)
+    path=cmor.close(var, file_name=True)
+    print 'Saved in:',path
+
+cmor.close()
+
+
+
+print 'hello'
diff --git a/Test/test_python_region.py b/Test/test_python_region.py
new file mode 100644
index 0000000..ea6209e
--- /dev/null
+++ b/Test/test_python_region.py
@@ -0,0 +1,33 @@
+import cmor
+
+import numpy
+
+cmor.setup("Test",netcdf_file_action=cmor.CMOR_REPLACE)
+
+cmor.dataset('historical', 'ukmo', 'HadCM3', '360_day',
+             institute_id="PCMDI",
+             contact="Mark Teixera",model_id='HadCM3',forcing="SO",parent_experiment_id="N/A",branch_time=0.)
+
+cmor.load_table("Tables/CMIP5_Omon")
+
+nlat = 90
+dlat = 180/nlat
+lats = numpy.arange(-90+dlat/2.,90,dlat)
+blats = numpy.arange(-90,90+dlat,dlat)
+
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,cell_bounds=blats,units='degrees_north')
+
+myregions=["atlantic_ocean", "indian_pacific_ocean", "pacific_ocean", "atlantic_arctic_ocean","global_ocean"]
+nreg=len(myregions)
+ireg = cmor.axis(table_entry='basin',units='1',coord_vals=myregions)
+ntime = 12
+
+itim = cmor.axis(table_entry='time',units='months since 2030',interval='1 month',coord_vals = numpy.arange(ntime), cell_bounds=numpy.arange(ntime+1))
+
+
+var = cmor.variable(table_entry='htovgyre',units='W',axis_ids=numpy.array([itim,ireg,ilat]))
+
+data = numpy.random.random((ntime,nreg,nlat))*50+200.
+
+cmor.write(var,data)
+cmor.close()
diff --git a/Test/test_python_reverted_lats.py b/Test/test_python_reverted_lats.py
new file mode 100644
index 0000000..34e155a
--- /dev/null
+++ b/Test/test_python_reverted_lats.py
@@ -0,0 +1,61 @@
+import cmor,numpy
+
+nlat = 10
+dlat = 180./nlat
+nlon = 20
+dlon = 360./nlon
+nlev = 17
+ntimes = 1
+
+lats = numpy.arange(90-dlat/2.,-90,-dlat)
+blats = numpy.arange(90,-90-dlat,-dlat)
+lats2 = numpy.arange(-90+dlat/2.,90,dlat)
+blats2 = numpy.arange(-90,90+dlat,dlat)
+lons = numpy.arange(0+dlon/2.,360.,dlon)
+blons = numpy.arange(0,360.+dlon,dlon)
+
+cmor.setup(inpath='.',netcdf_file_action=cmor.CMOR_REPLACE)
+cmor.dataset('historical', 'ukmo', 'HadCM3', 'gregorian',model_id='pcmdi-10b',outpath='Test',forcing='TO, Nat', contact="Jonathan sanchez",parent_experiment_id="lgm",branch_time=0)
+table='Tables/CMIP5_Amon'
+cmor.load_table(table)
+
+data = lats[:,numpy.newaxis]*lons[numpy.newaxis,:]
+
+print data.shape
+
+ilat = cmor.axis(table_entry='latitude',coord_vals=lats,cell_bounds=blats,units='degrees_north')
+ilat2 = cmor.axis(table_entry='latitude',coord_vals=lats2,cell_bounds=blats2,units='degrees_north')
+ilon = cmor.axis(table_entry='longitude',coord_vals=lons,cell_bounds=blons,units='degrees_east')
+itim = cmor.axis(table_entry='time',units='months since 2010')
+
+
+ivar = cmor.variable(table_entry='tasmin',units='K',axis_ids=[itim,ilat,ilon])
+cmor.write(ivar,data,ntimes_passed=1,time_vals=[0.],time_bnds=[0.,1.])
+fnm = cmor.close(ivar,file_name=True)
+
+print '*******************************'
+
+ivar2 = cmor.variable(table_entry='tasmin',units='K',axis_ids=[itim,ilat2,ilon])
+cmor.write(ivar2,data,ntimes_passed=1,time_vals=[1.],time_bnds=[1.,2.])
+fnm2 = cmor.close(ivar2,file_name=True)
+
+import vcs,cdms2
+x=vcs.init()
+x.portrait()
+import EzTemplate
+M=EzTemplate.Multi(columns=1,rows=3)
+print 'Getting templates'
+t1=M.get()
+t2=M.get()
+print 'Plotting'
+x.plot(data,t1)
+f=cdms2.open(fnm)
+s=f("tasmin")
+print 'Ok data read, shape:',s.shape
+x.plot(s,t2)
+f=cdms2.open(fnm2)
+s=f("tasmin")
+print 'Ok data read, shape:',s.shape
+x.plot(s,M.get())
+
+raw_input()
diff --git a/Test/test_python_user_interface_00.py b/Test/test_python_user_interface_00.py
new file mode 100644
index 0000000..3306f6c
--- /dev/null
+++ b/Test/test_python_user_interface_00.py
@@ -0,0 +1,131 @@
+from test_python_common import * # common subroutines
+
+import cmor._cmor
+import os
+
+pth = os.path.split(os.path.realpath(os.curdir))
+if pth[-1]=='Test':
+    ipth = opth = '.'
+else:
+    ipth = opth = 'Test'
+
+myaxes=numpy.zeros(9,dtype='i')
+myaxes2=numpy.zeros(9,dtype='i')
+myvars=numpy.zeros(9,dtype='i')
+
+
+cmor.setup(inpath=ipth,set_verbosity=cmor.CMOR_NORMAL, netcdf_file_action = cmor.CMOR_REPLACE, exit_control = cmor.CMOR_EXIT_ON_MAJOR);
+cmor.dataset(
+    outpath = opth,
+    experiment_id = "lgm",
+    institution = "GICC (Generic International Climate Center, Geneva, Switzerland)",
+    source = "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+    calendar = "standard",
+    realization = 1,
+    contact = "Rusty Koder (koder at middle_earth.net)",
+    history = "Output from archive/giccm_03_std_2xCO2_2256.",
+    comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",
+    references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",
+    leap_year=0,
+    leap_month=0,
+    month_lengths=None,
+    model_id="GICCM1",
+    forcing="TO",
+    institute_id="PCMDI",
+    parent_experiment_id="N/A",branch_time=0)
+
+tables=[]
+a = cmor.load_table(os.path.join(ipth,"../Tables/CMIP5_Omon"))
+tables.append(a)
+tables.append(cmor.load_table("Tables/CMIP5_Amon"))
+print 'Tables ids:',tables
+
+axes=[]
+id="time"
+units="months since 1980"
+print 'time bounds:',bnds_time
+# ok we need to make the bounds 2D because the cmor module "undoes this"
+bnds_time = numpy.reshape(bnds_time,(bnds_time.shape[0]/2,2))
+bnds_lat = numpy.reshape(bnds_lat,(bnds_lat.shape[0]/2,2))
+bnds_lon = numpy.reshape(bnds_lon,(bnds_lon.shape[0]/2,2))
+myaxes[0] = cmor.axis(id,coord_vals=Time,units=units,cell_bounds=bnds_time,interval="1 month")
+print 'time bounds:',bnds_time
+id='latitude'
+units="degrees_north"
+interval=""
+myaxes[1] = cmor.axis(id,coord_vals=alats,units=units,cell_bounds=bnds_lat)
+id="longitude"
+units="degrees_east"
+myaxes[2] = cmor.axis(id,coord_vals=alons,units=units,cell_bounds=bnds_lon)
+id="plevs"
+units="Pa"
+myaxes[3] = cmor.axis(id,coord_vals=plevs,units=units)
+
+myaxes[4] = cmor.axis("alternate_hybrid_sigma",coord_vals=zlevs,units="1",cell_bounds=zlev_bnds)
+
+
+cmor.set_table(tables[0])
+
+myaxes[5] = cmor.axis( "basin",coord_vals=regions,units="")
+id='time'
+units='months since 1980'
+myaxes[7] = cmor.axis(id,coord_vals=Time,units=units,cell_bounds=bnds_time,interval="1 month")
+id="latitude"
+units="degrees_north"
+interval=""
+myaxes[8] = cmor.axis(id,coord_vals=alats,units=units,cell_bounds=bnds_lat)
+
+cmor.set_table(tables[1])
+
+
+dtmp = -999;
+dtmp2=1.e-4;
+myaxes2[0] = myaxes[0];
+myaxes2[1] = myaxes[3];
+myaxes2[2] = myaxes[1];
+myaxes2[3] = myaxes[2];
+
+print 'ok doing the vars thing',positive2d[0]
+myvars[0] = cmor.variable(entry2d[0],units2d[0],myaxes[:3],'d',missing_value=None,tolerance=dtmp2,positive=positive2d[0],original_name=varin2d[0],history="no history",comment="no future")
+print 'vars 2'
+myvars[1] = cmor.variable(entry3d[2],units3d[2],myaxes2[:4],'d',original_name = varin3d[2])
+print 'vars 2'
+
+myaxes2[1] = myaxes[4];
+myvars[2] = cmor.variable(entry3d[0],units3d[0],myaxes2[:4],'d',original_name = varin3d[0])
+
+print 'vars 2'
+
+
+myvars[3] = cmor.zfactor(int(myaxes2[1]),"p0","Pa",None,'d',p0)
+print 'zfact',myaxes2[1]
+myvars[3] = cmor.zfactor(int(myaxes2[1]),"b","",myaxes2[1],'d',b_coeff,b_coeff_bnds)
+print 'zfact',myaxes2[1]
+myvars[3] = cmor.zfactor(int(myaxes2[1]),"a","",myaxes2[1],'d',a_coeff,a_coeff_bnds)
+#/*   printf("defining ap\n"); */
+#/*   for(i=0;i<5;i++) {a_coeff[i]*=1.e3;printf("sending acoef: %i, %lf\n",i,a_coeff[i]);} */
+#/*   for(i=0;i<6;i++) {a_coeff_bnds[i]*=1.e5;printf("sending acoef: %i, %lf\n",i,a_coeff_bnds[i]);} */
+#/*   ierr = cmor_zfactor(&myvars[3],myaxes2[1],"ap","hPa",1,&myaxes2[1],'d',&a_coeff,&a_coeff_bnds); */
+print 'zfact before last'
+myvars[3] = cmor.zfactor(zaxis_id = myaxes2[1],zfactor_name = "ps",units = "hPa",axis_ids = myaxes[:3],type = 'd')
+print 'zfact last'
+
+#  /* ok here we decalre a variable for region axis testing */
+cmor.set_table(tables[0])
+myaxes2[0] = myaxes[7]
+myaxes2[1] = myaxes[5]
+myaxes2[2] = myaxes[8]
+
+myvars[4] = cmor.variable("htovgyre","W",myaxes2[:3],'d',positive=positive2d[0],original_name=varin2d[0])
+
+cmor.set_table(tables[1])
+
+
+for i in range(ntimes):
+    data2d = read_2d_input_files(i, varin2d[0], lat,lon)
+    print 'writing time: ',i,data2d.shape,data2d
+    cmor.write(myvars[0],data2d,1)
+
+cmor.close()
+
+
diff --git a/Test/test_python_user_interface_01.py b/Test/test_python_user_interface_01.py
new file mode 100644
index 0000000..24fa34f
--- /dev/null
+++ b/Test/test_python_user_interface_01.py
@@ -0,0 +1,95 @@
+from test_python_common import * # common subroutines
+
+import cmor._cmor
+import os
+
+pth = os.path.split(os.path.realpath(os.curdir))
+if pth[-1]=='Test':
+    ipth = opth = '.'
+else:
+    ipth = opth = 'Test'
+
+
+myaxes=numpy.zeros(9,dtype='i')
+myaxes2=numpy.zeros(9,dtype='i')
+myvars=numpy.zeros(9,dtype='i')
+
+
+cmor.setup(inpath=ipth,set_verbosity=cmor.CMOR_NORMAL, netcdf_file_action = cmor.CMOR_REPLACE, exit_control = cmor.CMOR_EXIT_ON_MAJOR);
+cmor.dataset(
+    outpath = opth,
+    experiment_id = "historical",
+    institution = "GICC (Generic International Climate Center, Geneva, Switzerland)",
+    source = "GICCM1 2002: atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+    calendar = "standard",
+    realization = 1,
+    contact = "Rusty Koder (koder at middle_earth.net)",
+    history = "Output from archive/giccm_03_std_2xCO2_2256.",
+    comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",
+    references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",
+    leap_year=0,
+    leap_month=0,
+    month_lengths=None,
+    model_id="GICCM1",
+    forcing="Ant, Nat",
+    institute_id="pcmdi",
+    parent_experiment_id="piControl",branch_time=18336.33)
+
+tables=[]
+a = cmor.load_table("Tables/CMIP5_grids")
+tables.append(a)
+tables.append(cmor.load_table("Tables/CMIP5_Amon"))
+print 'Tables ids:',tables
+
+cmor.set_table(tables[0])
+
+x,y,lon_coords,lat_coords,lon_vertices,lat_vertices = gen_irreg_grid(lon,lat)
+
+
+
+myaxes[0] = cmor.axis(table_entry = 'y', 
+                      units = 'm', 
+                      coord_vals = y)
+myaxes[1] = cmor.axis(table_entry = 'x', 
+                      units = 'm', 
+                      coord_vals = x)
+
+grid_id = cmor.grid(axis_ids = myaxes[:2], 
+                    latitude = lat_coords, 
+                    longitude = lon_coords, 
+                    latitude_vertices = lat_vertices, 
+                    longitude_vertices = lon_vertices)
+print 'got grid_id:',grid_id
+myaxes[2] = grid_id
+
+mapnm = 'lambert_conformal_conic'
+params = [ "standard_parallel1",
+           "longitude_of_central_meridian","latitude_of_projection_origin",
+           "false_easting","false_northing","standard_parallel2" ]
+punits = ["","","","","","" ]
+pvalues = [-20.,175.,13.,8.,0.,20. ]
+cmor.set_grid_mapping(grid_id=myaxes[2],
+                      mapping_name = mapnm,
+                      parameter_names = params,
+                      parameter_values = pvalues,
+                      parameter_units = punits)
+
+cmor.set_table(tables[1])
+myaxes[3] = cmor.axis(table_entry = 'time',
+                      units = 'months since 1980')
+
+pass_axes = [myaxes[3],myaxes[2]]
+myvars[0] = cmor.variable( table_entry = 'hfls',
+                           units = 'W m-2',
+                           axis_ids = pass_axes,
+                           positive = 'down',
+                           original_name = 'HFLS',
+                           history = 'no history',
+                           comment = 'no future'
+                           )
+for i in range(ntimes):
+    data2d = read_2d_input_files(i, varin2d[0], lat,lon)
+    print 'writing time: ',i,data2d.shape,data2d
+    print Time[i],bnds_time[2*i:2*i+2]    
+    cmor.write(myvars[0],data2d,1,time_vals=Time[i],time_bnds=bnds_time[2*i:2*i+2])
+cmor.close()
diff --git a/Test/test_python_user_interface_03.py b/Test/test_python_user_interface_03.py
new file mode 100644
index 0000000..51b3250
--- /dev/null
+++ b/Test/test_python_user_interface_03.py
@@ -0,0 +1,104 @@
+import numpy
+import cmor
+
+print 'Done importing'
+try:
+    import cdms2
+except:
+    print "This test code needs cdms2 interface for i/0"
+    import sys
+    sys.exit()
+import os
+pth = os.path.split(os.path.realpath(os.curdir))
+if pth[-1]=='Test':
+    ipth = opth = '.'
+    dpth = '../data'
+else:
+    ipth = opth = 'Test'
+    dpth='data'
+
+myaxes=numpy.zeros(9,dtype='i')
+myaxes2=numpy.zeros(9,dtype='i')
+myvars=numpy.zeros(9,dtype='i')
+
+def read_input(var,order=None):
+    f=cdms2.open(os.path.join(dpth,"%s_sample.nc" % var))
+    ok = f(var)
+    if order is None:
+        s = f(var)
+    else:
+        s = f(var,order=order)
+    s.units=f[var].units
+    s.id=var
+    f.close()
+    return s,ok
+
+def prep_var(data):
+    rk = data.rank()
+    axes=[]
+    for i in range(rk):
+        ax = data.getAxis(i)
+        if ax.isLongitude():
+            id=cmor.axis(table_entry='longitude',units=ax.units,coord_vals=ax[:],cell_bounds=ax.getBounds())
+        elif ax.isLatitude():
+            id=cmor.axis(table_entry='latitude',units=ax.units,coord_vals=ax[:],cell_bounds=ax.getBounds())
+        else:
+            id=cmor.axis(table_entry=str(ax.id),units=ax.units,coord_vals=ax[:],cell_bounds=ax.getBounds())
+            print i,'units:',ax.units, ax[0]
+        axes.append(id)
+    var = cmor.variable(table_entry = data.id,
+                        units = data.units,
+                        axis_ids = numpy.array(axes),
+                        missing_value = data.missing_value,
+                        history = "rewrote by cmor via python script")
+    return var
+
+
+
+def prep_cmor():
+    cmor.setup(inpath=ipth,set_verbosity=cmor.CMOR_QUIET, netcdf_file_action = cmor.CMOR_REPLACE, exit_control = cmor.CMOR_EXIT_ON_MAJOR);
+    cmor.dataset(
+        outpath = opth,
+        experiment_id = "lgm",
+        institution = "GICC (Generic International Climate Center, Geneva, Switzerland)",
+        source = "GICCM1 (2002): atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); ocean: MOM (mom3_ver_3.5.2, 2x3L15); sea ice: GISIM4; land: GILSM2.5",
+        calendar = "standard",
+        realization = 1,
+        contact = "Rusty Koder (koder at middle_earth.net)",
+        history = "Output from archive/giccm_03_std_2xCO2_2256.",
+        comment = "Equilibrium reached after 30-year spin-up after which data were output starting with nominal date of January 2030",
+        references = "Model described by Koder and Tolkien (J. Geophys. Res., 2001, 576-591).  Also see http://www.GICC.su/giccm/doc/index.html  2XCO2 simulation described in Dorkey et al. '(Clim. Dyn., 2003, 323-357.)",
+        leap_year=0,
+        leap_month=0,
+        institute_id="PCMDI",
+        month_lengths=None,model_id="GICCM1",forcing="Nat",parent_experiment_id="N/A",branch_time=0.)
+    
+    tables=[]
+    a = cmor.load_table("Tables/CMIP5_Omon")
+    tables.append(a)
+    tables.append(cmor.load_table("Tables/CMIP5_Amon"))
+    return
+
+
+for var in ['tas',]:
+    print 'Testing var:',var
+    orders = ['tyx...','txy...','ytx...','yxt...','xyt...','xty...',]
+    for o in orders:
+        print '\tordering:',o
+        data,data_ordered = read_input(var,order=o)
+        prep_cmor()
+        print data.shape
+        var_id = prep_var(data)
+        df = data.filled(data.missing_value)
+        cmor.write(var_id,df)
+        cmor.close()
+        f=cdms2.open(opth+'/CMIP5/output/PCMDI/GICCM1/lgm/mon/atmos/%s/r1i1p1/%s_Amon_GICCM1_lgm_r1i1p1_186810-186812.nc'  % (var,var))
+        s=f(var)
+        if not numpy.allclose(s,data_ordered):
+            raise "Error reordering: %s"%o
+        else:
+            print 'order: %s, passed' % o
+        f.close()
+print 'Done'
+#cmor.close()
+print 'Finito'
diff --git a/Test/test_region.f90 b/Test/test_region.f90
new file mode 100644
index 0000000..37cb123
--- /dev/null
+++ b/Test/test_region.f90
@@ -0,0 +1,336 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_1d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, bnds_lat)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+      
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_1d_input_files(it, varname, field) 
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('OFLUX')  
+       factor = 1.e14
+       offset = 20.e14
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_1d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM test_region
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: reg = 4       ! number of regions 
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n1d = 1       ! number of IPCC Table O1 fields to be
+                                      !     output.
+  !
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table O1a fields
+  CHARACTER (LEN=5), DIMENSION(n1d) :: &
+                                 varin1d=(/ 'OFLUX' /)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=1), DIMENSION(n1d) :: &
+                                  units1d=(/ 'W' /)
+
+                     ! Corresponding IPCC Table O1a entry (variable name) 
+  CHARACTER (LEN=8), DIMENSION(n1d) :: entry1d = (/ 'htovgyre' /)
+
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, DIMENSION(n1d) :: var1d_ids
+  REAL, DIMENSION(lat,reg) :: data1d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  INTEGER :: ilat, ireg, itim
+  double precision bt
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m  
+  bt=0.
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, bnds_lat)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)' , model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+    
+  !  Define all axes that will be needed
+  
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Omon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ireg = cmor_axis(  &
+       table='Tables/CMIP5_Omon',        &
+       table_entry='basin',         &
+       length=reg,                   &
+       units='none',                 &
+       coord_vals= (/ "atlantic_arctic_ocean", "indian_pacific_ocean ", "pacific_ocean        ", &
+       "global_ocean         " /) )   
+        
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Omon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+
+  !  Define variables appearing in IPCC table O1a (functions of lat and reg)
+  
+  DO m=1,n1d
+     var1d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Omon',      &
+          table_entry=entry1d(m),     &
+          units=units1d(m),           &
+          axis_ids=(/ ilat, ireg, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin1d(m))
+  ENDDO
+  
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    ! Cycle through the 1-d fields (functions of lat and region), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=1,n1d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_1d_input_files(it, varin1d(m), data1d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var1d_ids(m),                        &
+             data          = data1d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table O ' &
+                // 'field ', entry1d(m), ', which I call ', varin1d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+ 
+  print*, 'Ok wrote everythin' 
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM test_region
+
diff --git a/Test/test_shrt_exp_nm_set_att_initi.f90 b/Test/test_shrt_exp_nm_set_att_initi.f90
new file mode 100644
index 0000000..ea7fba7
--- /dev/null
+++ b/Test/test_shrt_exp_nm_set_att_initi.f90
@@ -0,0 +1,346 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test1.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF//include -L/pcmdi/charles_work/NetCDF//lib -lnetcdf -module Modules -IModules -L. -lcmor Test/test1.f90 -o cmor_test
+
+MODULE local_subs
+
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+    
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1) = (it-1)*30.
+    time_bnds(2) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+    
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    
+    
+    SELECT CASE (TRIM(ADJUSTL(varname)))
+    CASE ('LATENT')  
+       
+       factor = 1.5
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    END SELECT
+    
+    DO j=1,SIZE(field, 1)
+       DO i=1,SIZE(field, 2)
+          field(j,i) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM mip_contribution
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: n2d = 1       ! number of AMIP Table 2 fields to be
+                                      !     output.
+
+  !   Tables associating the user's variables with AMIP standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for Table 1a fields
+                                ! My variable names for Table 2 fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                          varin2d=(/ 'LATENT  ' /)
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ' /)
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down' /)
+                     ! Corresponding AMIP Table 2 entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER, PARAMETER :: ntest=1
+  INTEGER, DIMENSION(3) :: axis2d_ids
+  INTEGER, DIMENSION(n2d+ntest) :: var2d_ids
+  REAL, DIMENSION(lat,lon) :: data2d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+   DOUBLE PRECISION, DIMENSION(5) :: plevs
+ DOUBLE PRECISION :: time,bt
+  DOUBLE PRECISION, DIMENSION(2):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+
+!!$  REAL, DIMENSION(lat*lon*lev) :: tmp3d
+!!$  REAL, DIMENSION(lat*lon) :: tmp2d
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  
+    character (len=200) :: msg,msg2
+
+    bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***	
+  
+  print*, 'calling read_coords '
+
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+  print*, 'returned from read_coords'
+  
+  ! Specify path where tables can be found, indicate that existing netCDF 
+  !    files should not be overwritten, and instruct CMOR to error exit on 
+  !    encountering errors of any severity.
+  
+  error_flag = cmor_setup(inpath='Test',   &
+       netcdf_file_action='replace',                                       &
+       set_verbosity=1,                                                    &
+       exit_control=1)
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) runcmor_write under IPCC 2xCO2 equilibrium experiment 
+  !   conditions, and provide information to be included as attributes in 
+  !   all CF-netCDF files written as part of this dataset.
+
+  print*, 'calling cmor_dataset'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',         &
+       experiment_id='lgm',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       ' Geneva, Switzerland)',                                &
+       source='GICCM1  2002(giccm_0_brnchT_itea_2, T63L32)',    &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also ' //          &
+       'see http://www.GICC.su/giccm/doc/index.html '  //      &
+       ' 2XCO2 simulation described in Dorkey et al. '//       &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+  
+  print*, 'returned from cmor_dataset'
+
+  error_flag = cmor_set_cur_dataset_attribute("initialization_method","1")
+  print*, 'returned from cmor_dataset'
+
+  !  Define axes for 3-d fields
+
+  print*, 'defining axes'
+  
+  axis2d_ids(1) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)              
+  axis2d_ids(2) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)              
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (below).
+print*, 'before time '
+  axis2d_ids(3) = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 1979-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  print*, 'finished defining axes'
+
+  
+
+  !  Define variables found in AMIP table 2a (2-d variables)
+  
+  DO m=1,ntest
+     write(msg,*)  m-1
+     msg2 = trim(entry2d(1)(1:4))
+     print*,'Test Code: defining variable: :',msg2
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  & 
+          table_entry=msg2,     & 
+!!$          file_suffix='1979-2001',    &
+          units=units2d(1),           & 
+          axis_ids=axis2d_ids,        &
+          missing_value=1.0e20,       &
+          positive=positive2d(1),     &
+          original_name=varin2d(1))   
+  ENDDO
+
+  print*, 'completed everything up to writing output fields '
+  
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  DO m=1,ntest
+     time_loop: DO it=1, ntimes
+        
+        ! In the following loops over the 3d and 2d fields, the user-written    
+        ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+        ! the requested AMIP table 1a and table 2 fields and store them in 
+        ! data3d and data2d, respectively.  In addition a user-written code 
+        ! (read_time) retrieves the time and time-bounds associated with the 
+        ! time sample (in units of 'days since 1970-1-1', consistent with the 
+        ! axis definitions above).  The bounds are set to the beginning and 
+        ! the end of the month retrieved, indicating the averaging period.
+        
+        ! The user must write a code to obtain the times and time-bounds for
+        !   the time slice.  The following line is simply a place-holder for
+        !   the user's code, which should replace it.
+        
+        call read_time(it, time, bnds_time)
+        
+        ! Cycle through the 3-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        
+        
+        ! Cycle through the 2-d fields, retrieve the requested variable and 
+        ! append each to the appropriate netCDF file.
+        
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(1), data2d)                  
+        
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        print*, RESHAPE(bnds_time, (/ 2,1 /))
+        error_flag = cmor_write(var_id =        var2d_ids(m),   &
+             data =          RESHAPE(data2d, (/ lat*lon /)),        &
+             ntimes_passed = 1,              &
+             time_vals =     (/ time /),           &
+             time_bnds =     RESHAPE(bnds_time, (/ 2,1 /)))
+        
+        print*, 'after writing variable, ', var2d_ids(m)
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing AMIP Table 2 ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+           
+!!$            error_flag = cmor_error_trace(device=0)
+           
+        END IF
+        
+     END DO time_loop
+     error_flag = cmor_close(var2d_ids(m))
+  END DO
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+print*, '******************************'
+print*, ' '
+print*, 'CMOR COMPLETED SUCCESSFULLY '   
+print*, ' '
+print*, '******************************'
+
+END PROGRAM mip_contribution
+
diff --git a/Test/test_sigma.f90 b/Test/test_sigma.f90
new file mode 100644
index 0000000..28bb057
--- /dev/null
+++ b/Test/test_sigma.f90
@@ -0,0 +1,583 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+        bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = i*10
+       bnds_lat(1,i) = i*10. - 5.
+       bnds_lat(2,i) = i*10. + 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+        plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+  
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    CASE ('tro3')
+       factor = 1.
+       offset = 0.
+    END SELECT
+    
+    DO k=1,SIZE(field, 1)
+       DO j=1,SIZE(field, 3)
+          DO i=1,SIZE(field, 2)
+             field(k,i,j) = ((SIZE(field, 1) - k)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)                  
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 2.8
+       offset = 10.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 4       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'tro3 ', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', '1e-9 ',  'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=4), DIMENSION(n3d) :: entry3d = (/ 'cl  ', 'tro3', 'ua  ', 'ta  ' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lev2,lon,lat) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, ilon2,ilat2,itim2
+  double precision bt
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m
+  bt=0.
+  
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archivcl_A1.nce/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)',model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+
+  !  Define all axes that will be needed
+  
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ilat2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev2,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='Tables/CMIP5_Amon',        &
+       table_entry='standard_sigma',       &
+!!$       table_entry='standard_hybrid_sigma',       &
+       units='1',&
+       length=lev,                   &
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 0.5e4
+!!$  p0 = 1.e5
+!!$  a_coeff = (/ 0.1, 0.2, 0.3, 0.2, 0.1 /)
+  a_coeff = (/ 0.2, 0.4, 0.6, 0.8, 0.95 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+!!$  a_coeff_bnds=(/0.,.15, .25, .25, .15, 0./)
+  a_coeff_bnds=(/0.,.3, .5, .7, .9, 1./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='ptop',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+!!$  error_flag = cmor_zfactor(  &
+!!$       zaxis_id=ilev,                       & 
+!!$       zfactor_name='b',                    &
+!!$       axis_ids= (/ ilev /),                &
+!!$       zfactor_values = b_coeff,            &
+!!$       zfactor_bounds = b_coeff_bnds  )
+!!$
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='Tables/CMIP5_Amon',      &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilev, ilon, ilat, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',      &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ipres, ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     if (m.ne.3) then
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  else
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Lmon',      &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ ilon2, ilat2, itim2 /), &
+          missing_value=1.0e28,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+     
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)                  
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data2d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) ' Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/test_singleton.f90 b/Test/test_singleton.f90
new file mode 100755
index 0000000..08945c6
--- /dev/null
+++ b/Test/test_singleton.f90
@@ -0,0 +1,631 @@
+!!$pgf90 -I/work/NetCDF/5.1/include -L/work/NetCDF/5.1/lib -l netcdf -L. -l cmor Test/test_dimensionless.f90 -IModules -o cmor_test
+!!$pgf90 -g -I/pcmdi/charles_work/NetCDF/include -L/pcmdi/charles_work/NetCDF/lib -lnetcdf -module Modules -IModules -L. -lcmor -I/pcmdi/charles_work/Unidata/include -L/pcmdi/charles_work/Unidata/lib -ludunits Test/test_dimensionless.f90 -o cmor_test
+
+MODULE local_subs
+
+  USE cmor_users_functions
+  PRIVATE
+  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    REAL, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    REAL, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    
+    INTEGER :: i
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+      plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.2
+       offset = 10.
+    CASE ('TSURF')
+       factor = 2.2
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+PROGRAM ipcc_test_code
+!
+!   Purpose:   To serve as a generic example of an application that
+!       uses the "Climate Model Output Rewriter" (CMOR)
+
+!    CMOR writes CF-compliant netCDF files.
+!    Its use is strongly encouraged by the IPCC and is intended for use 
+!       by those participating in many community-coordinated standard 
+!       climate model experiments (e.g., AMIP, CMIP, CFMIP, PMIP, APE,
+!       etc.)
+!
+!   Background information for this sample code:
+!
+!      Atmospheric standard output requested by IPCC are listed in 
+!   tables available on the web.  Monthly mean output is found in
+!   tables A1a and A1c.  This sample code processes only two 3-d 
+!   variables listed in table A1c ("monthly mean atmosphere 3-D data" 
+!   and only four 2-d variables listed in table A1a ("monthly mean 
+!   atmosphere + land surface 2-D (latitude, longitude) data").  The 
+!   extension to many more fields is trivial.
+!
+!      For this example, the user must fill in the sections of code that 
+!   extract the 3-d and 2-d fields from his monthly mean "history" 
+!   files (which usually contain many variables but only a single time 
+!   slice).  The CMOR code will write each field in a separate file, but 
+!   many monthly mean time-samples will be stored together.  These 
+!   constraints partially determine the structure of the code.
+!
+!
+!   Record of revisions:
+
+!       Date        Programmer(s)           Description of change
+!       ====        ==========              =====================
+!      10/22/03     Rusty Koder              Original code
+!       1/28/04     Les R. Koder             Revised to be consistent
+!                                            with evolving code design
+
+! include module that contains the user-accessible cmor functions.
+  USE cmor_users_functions
+  USE local_subs
+
+  IMPLICIT NONE
+
+  !   dimension parameters:
+  ! ---------------------------------
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+  INTEGER, PARAMETER :: lev2 =17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+
+  !   Tables associating the user's variables with IPCC standard output 
+  !   variables.  The user may choose to make this association in a 
+  !   different way (e.g., by defining values of pointers that allow him 
+  !   to directly retrieve data from a data record containing many 
+  !   different variables), but in some way the user will need to map his 
+  !   model output onto the Tables specifying the MIP standard output.
+
+  ! ----------------------------------
+
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                  units3d=(/ '%    ', 'm s-1',   'K    '  /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: error_flag
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  REAL, DIMENSION(lon,lat,lev2) :: data3d
+  DOUBLE PRECISION, DIMENSION(lat,1,lon) :: scramble
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  REAL, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  REAL, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev) :: a_coeff
+  REAL, DIMENSION(lev) :: b_coeff
+  REAL :: p0
+  REAL, DIMENSION(lev+1) :: a_coeff_bnds
+  REAL, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, ilon2,ilat2,itim2
+  INTEGER :: iht
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, i, j
+  double precision bt
+
+  bt=0.
+  ! ================================
+  !  Execution begins here:
+  ! ================================
+  
+  ! Read coordinate information from model into arrays that will be passed 
+  !   to CMOR.
+  ! Read latitude, longitude, and pressure coordinate values into 
+  !   alats, alons, and plevs, respectively.  Also generate latitude and 
+  !   longitude bounds, and store in bnds_lat and bnds_lon, respectively.
+  !   Note that all variable names in this code can be freely chosen by
+  !   the user.
+
+  !   The user must write the subroutine that fills the coordinate arrays 
+  !   and their bounds with actual data.  The following line is simply a
+  !   a place-holder for the user's code, which should replace it.
+  
+  !  *** possible user-written call ***
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action='replace')
+  
+  ! Define dataset as output from the GICC model (first member of an
+  !   ensemble of simulations) run under IPCC 2xCO2 equilibrium
+  !   experiment conditions, and provide information to be included as 
+  !   attributes in all CF-netCDF files written as part of this dataset.
+
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       contact = 'Rusty Koder (koder at middle_earth.net) ',      &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev2,                   &
+       coord_vals=plevs)
+  ilat2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+
+
+  iht = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='height2m',       &
+       units='m',                   &
+       length=1,                   &
+       coord_vals=(/3.0/))
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+  
+  !  define model eta levels (although these must be provided, they will
+  !    actually be replaced by a+b before writing the netCDF file)
+  zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+  zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+  ilev = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='standard_hybrid_sigma',       &
+       length=lev,                   &
+       units='1',&
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  !   define z-factors needed to transform from model level to pressure
+  p0 = 1.e5
+  a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+  b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+  a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+  b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       & 
+       zfactor_name='b',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = b_coeff,            &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(  &
+       zaxis_id=ilev,                       &
+       zfactor_name='a',                    &
+       axis_ids= (/ ilev /),                &
+       zfactor_values = a_coeff,            &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(  &
+       zaxis_id=ilev,                         &
+       zfactor_name='ps',                     &
+       axis_ids=(/ ilon, ilat, itim /),       &
+       units='Pa' )
+
+  !  Define the only field to be written that is a function of model level
+  !    (appearing in IPCC table A1c)
+
+  var3d_ids(1) = cmor_variable(    &
+       table='Tables/CMIP5_Amon',  &
+       table_entry=entry3d(1),     &
+       units=units3d(1),           &
+       axis_ids=(/ ilon, ilat, ilev, itim /),  &
+       missing_value=1.0e28, &
+       original_name=varin3d(1))
+  
+  !  Define variables appearing in IPCC table A1c that are a function of pressure
+  !         (3-d variables)
+  bt = 1.e28
+  DO m=2,n3d
+     var3d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry3d(m),     &
+          units=units3d(m),           &
+          axis_ids=(/ ilon, ilat, ipres, itim /), &
+          missing_value=1.0e28,       &
+          original_name=varin3d(m))
+  ENDDO
+  
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  
+  DO m=1,n2d
+     IF (m==2) THEN
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Amon',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilat, iht, ilon, itim /), &
+             missing_value=bt,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+     ELSE IF (m==3) THEN
+
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Lmon',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon2, ilat2, itim2 /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+
+     ELSE
+
+        var2d_ids(m) = cmor_variable(    &
+             table='Tables/CMIP5_Amon',  &
+             table_entry=entry2d(m),     & 
+             units=units2d(m),           & 
+             axis_ids=(/ ilon, ilat, itim /), &
+             missing_value=1.0e28,       &
+             positive=positive2d(m),     &
+             original_name=varin2d(m))   
+        
+     ENDIF
+  ENDDO
+
+  PRINT*, ' '
+  PRINT*, 'completed everything up to writing output fields '
+  PRINT*, ' '
+
+  !  Loop through history files (each containing several different fields, 
+  !       but only a single month of data, averaged over the month).  Then 
+  !       extract fields of interest and write these to netCDF files (with 
+  !       one field per file, but all months included in the loop).
+  
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    call read_3d_input_files(it, varin3d(1), data3d)
+    print*, 'shape(data3d)',shape(data3d),varin3d(1)
+    error_flag = cmor_write(                                  &
+         var_id        = var3d_ids(1),                        &
+         data          = data3d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time   )
+
+    call read_2d_input_files(it, varin2d(4), data2d)                  
+
+    print*, 'shape(data2d)',shape(data2d),varin2d(4)
+    error_flag = cmor_write(                                  &
+         var_id        = zfactor_id,                          &
+         data          = data2d,                              &
+         ntimes_passed = 1,                                   &
+         time_vals     = time,                                &
+         time_bnds     = bnds_time,                           &
+         store_with    = var3d_ids(1) )
+
+    ! Cycle through the 3-d fields (stored on pressure levels), 
+    ! and retrieve the requested variable and append each to the 
+    ! appropriate netCDF file.
+
+    DO m=2,n3d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+
+        call read_3d_input_files(it, varin3d(m), data3d)
+       
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+        
+        print*, 'shape(data3d)',shape(data3d),varin3d(m)
+        error_flag = cmor_write(                                  &
+             var_id        = var3d_ids(m),                        &
+             data          = data3d,                              &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+        IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1c ' &
+                // 'field ', entry3d(m), ', which I call ', varin3d(m)
+           write(*,*) ' Was processing time sample: ', time
+                      
+        END IF
+
+     END DO
+
+
+     ! Cycle through the 2-d fields, retrieve the requested variable and 
+     ! append each to the appropriate netCDF file.
+     
+     DO m=1,n2d
+           print*, 'writing:',entry2d(m),m
+           ! The user must write the code that fills the arrays of data
+           ! that will be passed to CMOR.  The following line is simply a
+           ! a place-holder for the user's code, which should replace it.
+           
+           call read_2d_input_files(it, varin2d(m), data2d)                  
+           
+           ! append a single time sample of data for a single field to 
+           ! the appropriate netCDF file.
+           
+        IF (m == 2) THEN
+
+           DO j=1,lat
+              DO i=1,lon
+                 scramble(j,1,i) = data2d(i,j)
+              END DO
+           END DO
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(2),                        &
+                data          = scramble(:,1,:),                            &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+
+        ELSE
+
+           error_flag = cmor_write(                                  &
+                var_id        = var2d_ids(m),                        &
+                data          = data2d,                              &
+                ntimes_passed = 1,                                   &
+                time_vals     = time,                                &
+                time_bnds     = bnds_time  )
+           
+           IF (error_flag < 0) THEN
+              ! write diagnostic messages to standard output device
+              write(*,*) ' Error encountered writing IPCC Table A1a ' &
+                   // 'field ', entry2d(m), ', which I call ', varin2d(m)
+              write(*,*) ' Was processing time sample: ', time 
+              
+           END IF
+
+        END IF
+
+     END DO
+     
+  END DO time_loop
+  
+  !   Close all files opened by CMOR.
+  
+  error_flag = cmor_close()  
+
+  print*, ' '
+  print*, '******************************'
+  print*, ' '
+  print*, 'ipcc_test_code executed to completion '   
+  print*, ' '
+  print*, '******************************'
+  
+END PROGRAM ipcc_test_code
+
diff --git a/Test/test_sophie.f90 b/Test/test_sophie.f90
new file mode 100644
index 0000000..94823e1
--- /dev/null
+++ b/Test/test_sophie.f90
@@ -0,0 +1,509 @@
+MODULE local_subs
+
+ USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+
+ SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+   IMPLICIT NONE
+
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+
+   INTEGER :: i
+
+   DO i = 1, SIZE(alons)
+      alons(i) = (i-1)*360./SIZE(alons)
+      bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+      bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+   END DO
+
+   DO i = 1, SIZE(alats)
+      alats(i) = (size(alats)+1-i)*10
+      bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+      bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+   END DO
+
+   DO i = 1, SIZE(plevs)
+      plevs(i) = i*1.0e4
+   END DO
+      plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+
+   RETURN
+ END SUBROUTINE read_coords
+
+ SUBROUTINE read_time(it, time, time_bnds)
+
+   IMPLICIT NONE
+
+   INTEGER, INTENT(IN) :: it
+   DOUBLE PRECISION, INTENT(OUT) :: time
+   DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+
+   time = (it-0.5)*30.
+   time_bnds(1,1) = (it-1)*30.
+   time_bnds(2,1) = it*30.
+
+   RETURN
+ END SUBROUTINE read_time
+
+ SUBROUTINE read_3d_input_files(it, varname, field)
+
+   IMPLICIT NONE
+
+   INTEGER, INTENT(IN) :: it
+   CHARACTER(len=*), INTENT(IN) :: varname
+   REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+
+   INTEGER :: i, j, k
+   REAL :: factor, offset
+   CHARACTER(len=LEN(varname)) :: tmp
+
+   tmp = TRIM(ADJUSTL(varname))
+   SELECT CASE (tmp)
+   CASE ('CLOUD')  
+      factor = 0.1
+      offset = -50.
+   CASE ('U')  
+      factor = 1.
+      offset = 100.
+   CASE ('T')
+      factor = 0.5
+      offset = -150.
+   END SELECT
+   DO k=1,SIZE(field, 3)
+      DO j=1,SIZE(field, 2)
+         DO i=1,SIZE(field, 1)
+            field(i,j,k) = ((k-1)*64. + (j-1)*16. + (i-1)*4. + it)*factor - offset
+         END DO
+      END DO
+   END DO
+ END SUBROUTINE read_3d_input_files
+
+ SUBROUTINE read_2d_input_files(it, varname, field)
+
+   IMPLICIT NONE
+
+   INTEGER, INTENT(IN) :: it
+   CHARACTER(len=*), INTENT(IN) :: varname
+   REAL, INTENT(OUT), DIMENSION(:,:) :: field
+
+   INTEGER :: i, j
+   REAL :: factor, offset
+   CHARACTER(len=LEN(varname)) :: tmp
+
+   tmp = TRIM(ADJUSTL(varname))
+   SELECT CASE (tmp)
+   CASE ('LATENT')  
+
+      factor = .001
+      offset = 0.
+   CASE ('TSURF')
+      factor = 2.0
+      offset = -220.
+   CASE ('SOIL_WET')
+      factor = 10.
+      offset = 0.
+   CASE ('PSURF')
+      factor = 100.
+      offset = -9.7e4
+   END SELECT
+
+   DO j=1,SIZE(field, 2)
+      DO i=1,SIZE(field, 1)
+         field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+      END DO
+   END DO
+
+ END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+program testing
+ use cmor_users_functions
+ use local_subs
+   implicit none
+   integer error_flag
+ INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+ INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+ INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+ INTEGER, PARAMETER :: lev = 5       ! number of standard pressure levels
+ INTEGER, PARAMETER :: lev2 = 17       ! number of standard pressure levels
+!  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+ INTEGER, PARAMETER :: n2d = 1       ! number of IPCC Table A1a fields to be
+                                     !     output.
+ INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                     !     be output.  
+                               ! My variable names for IPCC Table A1c fields
+ CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                               ! Units appropriate to my data
+ CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                 units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                    ! Corresponding IPCC Table A1c entry (variable name) 
+ CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                               ! My variable names for IPCC Table A1a fields
+ CHARACTER (LEN=8), DIMENSION(n2d) :: &
+!                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+                 varin2d=(/ 'LATENT  ' /)
+
+                               ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n2d) :: &
+!                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+                         units2d=(/ '% ' /)
+
+  CHARACTER (LEN=4), DIMENSION(n2d) :: &
+!                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+                     positive2d= (/  '    '  /)
+
+                    ! Corresponding IPCC Table A1a entry (variable name) 
+ CHARACTER (LEN=5), DIMENSION(n2d) :: &
+!                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+                       entry2d = (/ 'sftlf ' /)
+
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+ INTEGER :: znondim_id, zfactor_id
+ INTEGER, DIMENSION(n2d) :: var2d_ids
+ INTEGER, DIMENSION(n3d) :: var3d_ids
+ REAL, DIMENSION(lon,lat) :: data2d
+ real, DIMENSION(lon*lat) ::  data1dtest
+ REAL, DIMENSION(lon,lat,lev2) :: data3d
+ DOUBLE PRECISION, DIMENSION(lat) :: alats
+ DOUBLE PRECISION, DIMENSION(lon) :: alons
+ DOUBLE PRECISION, DIMENSION(lev2) :: plevs
+ DOUBLE PRECISION, DIMENSION(1) :: time
+ DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+ DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+ DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+ DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+ DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+ real, DIMENSION(lev) :: a_coeff
+ DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+ DOUBLE PRECISION :: p0
+ DOUBLE PRECISION :: p0array(1)
+ real, DIMENSION(lev+1) :: a_coeff_bnds
+ DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+ INTEGER :: ilon, ilat, ipres, ilev, itim,i,ilon2,ilat2
+ real :: missing
+ double precision bt
+
+ !  Other variables:
+ !  ---------------------
+
+ INTEGER :: it, m, j,k
+
+
+ bt=0.
+! format classic(NETCDF-3)
+!  j = CMOR_REPLACE_3
+! format NETCDF-4
+ j = CMOR_REPLACE
+ k = CMOR_EXIT_ON_MAJOR
+ error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+      exit_control=k)
+ print*,'Test code: done'
+ error_flag = cmor_dataset(                                   &
+      outpath='Test',                                         &
+      experiment_id='lgm',           &
+      institution=                                            &
+      'GICC (Generic International Climate Center, ' //       &
+      'Geneva, Switzerland)',                                 &
+      source='GICCM1 (2002): ' //                             &
+      'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+      'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+      'sea ice: GISIM4; land: GILSM2.5',                      &
+      calendar='360_day',                                      &
+      realization=1,                                          &
+      history='Output from archive/giccm_03_std_2xCO2_2256.', &
+      comment='Equilibrium reached after 30-year spin-up ' // &
+      'after which data were output starting with nominal '// &
+      'date of January 2030',                                 &
+      references='Model described by Koder and Tolkien ' //   &
+      '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+      'see http://www.GICC.su/giccm/doc/index.html '     //   &
+      ' 2XCO2 simulation described in Dorkey et al. '    //   &
+      '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+      forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  
+ print*, 'Test code: done 2 lalala'
+
+ call read_coords(alats, alons, plevs, bnds_lat, bnds_lon)
+
+
+ print*, 'Test code: ok calling axis stuff lat',alats
+ ilat = cmor_axis(  &
+      table='Tables/CMIP5_Amon',    &
+      table_entry='latitude',       &
+      units='degrees_north',        &  
+      length=lat,                   &
+      coord_vals=alats,             & 
+      cell_bounds=bnds_lat)        
+
+ print*, 'Test code: ok calling axis stuff lon',ilat
+ ilon = cmor_axis(  &
+      table='Tables/CMIP5_Amon',    &
+      table_entry='longitude',      &
+      length=lon,                   &
+      units='degrees_east',         &
+      coord_vals=alons,             &
+      cell_bounds=bnds_lon)      
+
+ ilat2 = cmor_axis(  &
+      table='Tables/CMIP5_fx',    &
+      table_entry='latitude',       &
+      units='degrees_north',        &  
+      length=lat,                   &
+      coord_vals=alats,             & 
+      cell_bounds=bnds_lat)        
+
+ print*, 'Test code: ok calling axis stuff lon',ilat
+ ilon2 = cmor_axis(  &
+      table='Tables/CMIP5_fx',    &
+      table_entry='longitude',      &
+      length=lon,                   &
+      units='degrees_east',         &
+      coord_vals=alons,             &
+      cell_bounds=bnds_lon)      
+
+ print*, 'Test code: ok calling axis stuff pressure',ilon
+ ipres = cmor_axis(  &
+      table='Tables/CMIP5_Amon',    &
+      table_entry='plevs',       &
+      units='Pa',                   &
+      length=lev2,                   &
+      coord_vals=plevs)
+
+ !   note that the time axis is defined next, but the time coordinate 
+ !   values and bounds will be passed to cmor through function 
+ !   cmor_write (later, below).
+
+ print*, 'Test code: ok calling axis stuff time',ipres,ntimes
+ itim = cmor_axis(  &
+      table='Tables/CMIP5_Amon',    &
+      table_entry='time',           &
+      units='days since 2030-1-1',  &
+      length=ntimes,                &
+      interval='30 days')
+
+ !  define model eta levels (although these must be provided, they will
+ !    actually be replaced by a+b before writing the netCDF file)
+ zlevs = (/ 0.1, 0.3, 0.55, 0.7, 0.9 /)
+ zlev_bnds=(/ 0.,.2, .42, .62, .8, 1. /)
+
+ print*, 'Test code: ok calling axis stuff lev2',itim
+ ilev = cmor_axis(  &
+      table='Tables/CMIP5_Amon',    &
+      table_entry='standard_hybrid_sigma',       &
+      units="1",   &
+      length=lev,                   &
+      coord_vals=zlevs,             &
+      cell_bounds=zlev_bnds)
+
+ print*, 'Test code: ok called stuff lev2',ilev
+ !   define z-factors needed to transform from model level to pressure
+ p0 = 1.e5
+ p0array(1)=p0
+ a_coeff = (/ 0.1, 0.2, 0.3, 0.22, 0.1 /)
+ b_coeff = (/ 0.0, 0.1, 0.2, 0.5, 0.8 /)
+
+ a_coeff_bnds=(/0.,.15, .25, .25, .16, 0./)
+ b_coeff_bnds=(/0.,.05, .15, .35, .65, 1./)
+
+ print*, 'Test code: zfactor p0'
+ error_flag = cmor_zfactor(  &
+      zaxis_id=ilev,                      &
+      zfactor_name='p0',                  &
+      units='Pa',                         &
+      zfactor_values = p0)
+
+ print*, 'Test code: result',error_flag
+ print*, 'Test code: zfactor b'
+ error_flag = cmor_zfactor(  &
+      zaxis_id=ilev,                       & 
+      zfactor_name='b',                    &
+      axis_ids= (/ ilev /),                &
+      zfactor_values = b_coeff,            &
+      zfactor_bounds = b_coeff_bnds  )
+
+ print*, 'Test code: result',error_flag
+ print*, 'Test code: zfactor a'
+ error_flag = cmor_zfactor(  &
+      zaxis_id=ilev,                       &
+      zfactor_name='a',                    &
+      axis_ids= (/ ilev /),                &
+      zfactor_values = a_coeff,            &
+      zfactor_bounds = a_coeff_bnds )
+
+ print*, 'Test code: result',error_flag
+ print*, 'Test code: zfactor ps'
+ zfactor_id = cmor_zfactor(  &
+      zaxis_id=ilev,                         &
+      zfactor_name='ps',                     &
+      axis_ids=(/ ilon, ilat, itim /),       &
+      units='Pa' )
+
+ print*, 'Test code: result',zfactor_id
+ print*, 'Test code: var3d'
+ missing = 1.e28
+ var3d_ids(1) = cmor_variable(    &
+      table='Tables/CMIP5_Amon',  &
+      table_entry=entry3d(1),     &
+      units=units3d(1),           &
+      axis_ids=(/ ilon, ilat, ilev, itim /),  &
+      missing_value=missing, &
+      original_name=varin3d(1))
+
+ !  Define variables appearing in IPCC table A1c that are a function of pressure
+ !         (3-d variables)
+
+ print*, 'Test code: result',var3d_ids(1)
+ DO m=2,n3d
+    print*, 'Test code: var: ',entry3d(m)
+    var3d_ids(m) = cmor_variable(    &
+         table='Tables/CMIP5_Amon',  &
+         table_entry=entry3d(m),     &
+         units=units3d(m),           &
+         axis_ids=(/ ilon, ilat, ipres, itim /), &
+         missing_value=missing,       &
+         original_name=varin3d(m))
+    print*, 'Test code: result',var3d_ids(m)
+ ENDDO
+
+
+ !  Define variables appearing in IPCC table A1a (2-d variables)
+
+ DO m=1,n2d
+    print*, 'Test code: var: ',entry2d(m)
+    var2d_ids(m) = cmor_variable(    &
+         table='Tables/CMIP5_fx',  &
+         table_entry=entry2d(m),     & 
+         units=units2d(m),           & 
+    !     axis_ids=(/ ilon, ilat, itim /), &
+         axis_ids=(/ ilon2, ilat2 /), &
+         missing_value=missing,       &
+         positive=positive2d(m),     &
+         original_name=varin2d(m))   
+    print*, 'Test code: result',var2d_ids(m)
+ ENDDO
+
+ PRINT*, 'Test code:  '
+ PRINT*, 'Test code: completed everything up to writing output fields '
+ PRINT*, 'Test code:  '
+ time_loop: DO it=1, ntimes
+
+    ! In the following loops over the 3d and 2d fields, the user-written    
+    ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+    ! the requested IPCC table A1c and table A1a fields and store them in 
+    ! data3d and data2d, respectively.  In addition a user-written code 
+    ! (read_time) retrieves the time and time-bounds associated with the 
+    ! time sample (in units of 'days since 1970-1-1', consistent with the 
+    ! axis definitions above).  The bounds are set to the beginning and 
+    ! the end of the month retrieved, indicating the averaging period.
+
+    ! The user must write a code to obtain the times and time-bounds for
+    !   the time slice.  The following line is simply a place-holder for
+    !   the user's code, which should replace it.
+   call read_time(it, time(1), bnds_time)
+   call read_3d_input_files(it, varin3d(1), data3d)
+
+   error_flag = cmor_write(                                  &
+        var_id        = var3d_ids(1),                        &
+        data          = data3d,                              &
+        ntimes_passed = 1,                                   &
+        time_vals     = time,                                &
+        time_bnds     = bnds_time   )
+
+   call read_2d_input_files(it, 'PSURF', data2d)                  
+
+   error_flag = cmor_write(                                  &
+        var_id        = zfactor_id,                          &
+        data          = data2d,                              &
+        ntimes_passed = 1,                                   &
+        time_vals     = time,                                &
+        time_bnds     = bnds_time,                           &
+        store_with    = var3d_ids(1) )
+   
+   print*, 'Test code: result',error_flag
+  ! Cycle through the 3-d fields (stored on pressure levels), 
+   ! and retrieve the requested variable and append each to the 
+   ! appropriate netCDF file.
+
+   DO m=2,n3d
+
+       ! The user must write the code that fills the arrays of data
+       ! that will be passed to CMOR.  The following line is simply a
+       ! a place-holder for the user's code, which should replace it.
+
+       call read_3d_input_files(it, varin3d(m), data3d)
+
+       ! append a single time sample of data for a single field to 
+       ! the appropriate netCDF file.
+       print*, ' Writing 3D variable:',var3d_ids(m)
+       error_flag = cmor_write(                                  &
+            var_id        = var3d_ids(m),                        &
+            data          = data3d,                              &
+            ntimes_passed = 1,                                   &
+            time_vals     = time,                                &
+            time_bnds     = bnds_time  )
+
+       IF (error_flag < 0) THEN
+          ! write diagnostic messages to standard output device
+          write(*,*) 'Test code:  Error encountered writing IPCC Table A1c ' &
+               // 'field ', entry3d(m), ', which I call ', varin3d(m)
+          write(*,*) 'Test code:  Was processing time sample: ', time
+
+       END IF
+
+    END DO
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+    DO m=1,n2d
+
+       ! The user must write the code that fills the arrays of data
+       ! that will be passed to CMOR.  The following line is simply a
+       ! a place-holder for the user's code, which should replace it.
+
+       print*, 'varinf',varin2d(m)
+       call read_2d_input_files(it, varin2d(m), data2d)                  
+
+       ! append a single time sample of data for a single field to 
+       ! the appropriate netCDF file.
+       print*, 'Writing var 2d:',var2d_ids(m),entry2d(m)
+       error_flag = cmor_write(                                  &
+            var_id        = var2d_ids(m),                        &
+            data          = data2d,                              &
+            ntimes_passed = 0 )
+            !ntimes_passed = 1,                                   &
+            !time_vals     = time,                                &
+            !time_bnds     = bnds_time  )
+
+      IF (error_flag < 0) THEN
+          ! write diagnostic messages to standard output device
+          write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+               // 'field ', entry2d(m), ', which I call ', varin2d(m)
+          write(*,*) 'Test code:  Was processing time sample: ', time 
+
+       END IF
+
+    END DO
+
+ END DO time_loop
+
+ error_flag = cmor_close()
+
+end program testing
diff --git a/Test/test_station_data.f90 b/Test/test_station_data.f90
new file mode 100644
index 0000000..adc4e80
--- /dev/null
+++ b/Test/test_station_data.f90
@@ -0,0 +1,402 @@
+MODULE local_subs
+
+  USE cmor_users_functions
+!!$  PRIVATE
+!!$  PUBLIC read_coords, read_time, read_3d_input_files, read_2d_input_files
+CONTAINS
+  
+  SUBROUTINE read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+
+    IMPLICIT NONE
+    
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: alons
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: plevs
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lat
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:,:) :: bnds_lon
+    INTEGER, INTENT(OUT), DIMENSION(:) ::  station
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lats
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(:) :: st_lons
+    
+    INTEGER :: i, j, k
+    
+    DO i = 1, SIZE(alons)
+       alons(i) = (i-1)*360./SIZE(alons)
+       bnds_lon(1,i) = (i - 1.5)*360./SIZE(alons)
+       bnds_lon(2,i) = (i - 0.5)*360./SIZE(alons)
+    END DO
+    
+    DO i = 1, SIZE(alats)
+       alats(i) = (size(alats)+1-i)*10
+       bnds_lat(1,i) = (size(alats)+1-i)*10 + 5.
+       bnds_lat(2,i) = (size(alats)+1-i)*10 - 5.
+    END DO
+  
+    DO i = 1, SIZE(plevs)
+       plevs(i) = i*1.0e4
+    END DO
+       plevs = (/100000., 92500., 85000., 70000.,&
+       60000., 50000., 40000., 30000., 25000., 20000.,&
+       15000., 10000., 7000., 5000., 3000., 2000., 1000. /)
+   
+    k = 1
+    DO i = 1, SIZE(alons)
+      DO j = 1, SIZE(alats)
+        station(k) = k
+        st_lons(k) = alons(i)
+        st_lats(k) = alats(j)
+        k = k+1
+      END DO   
+    END DO 
+    
+    
+    RETURN
+  END SUBROUTINE read_coords
+
+  SUBROUTINE read_time(it, time, time_bnds)
+    
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    DOUBLE PRECISION, INTENT(OUT) :: time
+    DOUBLE PRECISION, INTENT(OUT), DIMENSION(2,1) :: time_bnds
+    
+    time = (it-0.5)*30.
+    time_bnds(1,1) = (it-1)*30.
+    time_bnds(2,1) = it*30.
+    
+    RETURN
+  END SUBROUTINE read_time
+  
+  !------------------------------------------------
+  SUBROUTINE read_3d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
+    
+    INTEGER :: i, j, k
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('CLOUD')  
+       factor = 0.1
+       offset = -50.
+    CASE ('U')  
+       factor = 1.
+       offset = 100.
+    CASE ('T')
+       factor = 0.5
+       offset = -150.
+    END SELECT
+    
+    DO k=1,SIZE(field, 3)
+       DO j=1,SIZE(field, 2)
+          DO i=1,SIZE(field, 1)
+             field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
+          END DO
+       END DO
+    END DO
+    
+  END SUBROUTINE read_3d_input_files
+  
+  !------------------------------------------------
+  SUBROUTINE read_2d_input_files(it, varname, field)
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(IN) :: it
+    CHARACTER(len=*), INTENT(IN) :: varname
+    REAL, INTENT(OUT), DIMENSION(:,:) :: field
+    
+    INTEGER :: i, j
+    REAL :: factor, offset
+    CHARACTER(len=LEN(varname)) :: tmp
+    
+    tmp = TRIM(ADJUSTL(varname))
+    SELECT CASE (tmp)
+    CASE ('LATENT')  
+       
+       factor = 1.
+       offset = 20.
+    CASE ('TSURF')
+       factor = 2.0
+       offset = -220.
+    CASE ('SOIL_WET')
+       factor = 10.
+       offset = 0.
+    CASE ('PSURF')
+       factor = 100.
+       offset = -9.7e4
+    END SELECT
+    
+    DO j=1,SIZE(field, 2)
+       DO i=1,SIZE(field, 1)
+          field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
+       END DO
+    END DO
+
+  END SUBROUTINE read_2d_input_files
+
+END MODULE local_subs
+
+
+!=======================================================
+program testing
+  use cmor_users_functions
+  use local_subs
+    implicit none
+    integer error_flag
+  INTEGER, PARAMETER :: ntimes = 2    ! number of time samples to process
+  INTEGER, PARAMETER :: lon = 4       ! number of longitude grid cells  
+  INTEGER, PARAMETER :: lat = 3       ! number of latitude grid cells
+  INTEGER, PARAMETER :: lev = 17       ! number of standard pressure levels
+  INTEGER, PARAMETER :: nst = 12      ! number of stations
+  INTEGER, PARAMETER :: n2d = 4       ! number of IPCC Table A1a fields to be
+                                      !     output.
+  INTEGER, PARAMETER :: n3d = 3       ! number of IPCC Table A1c fields to 
+                                      !     be output.  
+                                ! My variable names for IPCC Table A1c fields
+  CHARACTER (LEN=5), DIMENSION(n3d) :: &
+                                 varin3d=(/'CLOUD', 'U    ', 'T    '/)
+
+                                ! Units appropriate to my data
+  CHARACTER (LEN=6), DIMENSION(n3d) :: &
+                                  units3d=(/ '%     ', 'm s-1 ',   'K     ' /)
+
+                     ! Corresponding IPCC Table A1c entry (variable name) 
+  CHARACTER (LEN=2), DIMENSION(n3d) :: entry3d = (/ 'cl', 'ua', 'ta' /)
+
+                                ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=8), DIMENSION(n2d) :: &
+                  varin2d=(/ 'LATENT  ', 'TSURF   ', 'SOIL_WET', 'PSURF   ' /)
+
+                                ! Units appropriate to my data
+   CHARACTER (LEN=6), DIMENSION(n2d) :: &
+                          units2d=(/ 'W m-2 ', 'K     ', 'kg m-2', 'Pa    ' /)
+
+   CHARACTER (LEN=4), DIMENSION(n2d) :: &
+                      positive2d= (/  'down',  '    ', '    ', '    '  /)
+
+                     ! Corresponding IPCC Table A1a entry (variable name) 
+  CHARACTER (LEN=5), DIMENSION(n2d) :: &
+                        entry2d = (/ 'hfls ', 'tas  ', 'mrsos', 'ps   ' /)
+
+  INTEGER igrid;
+                          
+!  uninitialized variables used in communicating with CMOR:
+!  ---------------------------------------------------------
+
+  INTEGER :: znondim_id, zfactor_id
+  INTEGER, DIMENSION(n2d) :: var2d_ids
+  INTEGER, DIMENSION(n3d) :: var3d_ids
+  REAL, DIMENSION(lon,lat) :: data2d
+  real, DIMENSION(lon*lat) ::  data1dtest
+  REAL, DIMENSION(lon,lat,lev) :: data3d
+  REAL, DIMENSION(lon*lat,lev) :: data2d_st
+  DOUBLE PRECISION, DIMENSION(lat) :: alats
+  DOUBLE PRECISION, DIMENSION(lon) :: alons
+  DOUBLE PRECISION, DIMENSION(lev) :: plevs
+  INTEGER, DIMENSION(lon*lat) :: station
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lons
+  DOUBLE PRECISION, DIMENSION(lon*lat) :: st_lats
+  DOUBLE PRECISION, DIMENSION(1) :: time
+  DOUBLE PRECISION, DIMENSION(2,1):: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev) :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  real, DIMENSION(lev) :: a_coeff
+  DOUBLE PRECISION, DIMENSION(lev) :: b_coeff
+  DOUBLE PRECISION :: p0,bt
+  DOUBLE PRECISION :: p0array(1)
+  real, DIMENSION(lev+1) :: a_coeff_bnds
+  DOUBLE PRECISION, DIMENSION(lev+1) :: b_coeff_bnds
+  INTEGER :: ilon, ilat, ipres, ilev, itim, i, ist,itim2
+  real :: missing
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER :: it, m, j,k
+  bt=0.
+  j = CMOR_REPLACE
+  k = CMOR_EXIT_ON_MAJOR
+  error_flag = cmor_setup(inpath='Test', netcdf_file_action=j,&
+       exit_control=k)
+  print*,'Test code: done'
+  error_flag = cmor_dataset(                                   &
+       outpath='Test',                                         &
+       experiment_id='abrupt 4XCO2',           &
+       institution=                                            &
+       'GICC (Generic International Climate Center, ' //       &
+       'Geneva, Switzerland)',                                 &
+       source='GICCM1 (2002): ' //                             &
+       'atmosphere:  GICAM3 (gicam_0_brnchT_itea_2, T63L32); '// &
+       'ocean: MOM (mom3_ver_3.5.2, 2x3L15); '             //  &
+       'sea ice: GISIM4; land: GILSM2.5',                      &
+       calendar='360_day',                                      &
+       realization=1,                                          &
+       history='Output from archive/giccm_03_std_2xCO2_2256.', &
+       comment='Equilibrium reached after 30-year spin-up ' // &
+       'after which data were output starting with nominal '// &
+       'date of January 2030',                                 &
+       references='Model described by Koder and Tolkien ' //   &
+       '(J. Geophys. Res., 2001, 576-591).  Also '        //   &
+       'see http://www.GICC.su/giccm/doc/index.html '     //   &
+       ' 2XCO2 simulation described in Dorkey et al. '    //   &
+       '(Clim. Dyn., 2003, 323-357.)', model_id="GICCM1", &
+       forcing='TO',contact="Barry Bonds",institute_id="PCMDI",&
+       parent_experiment_id="N/A",branch_time=bt)
+  print*, 'Test code: done 2 lalala'
+  
+  call read_coords(alats, alons, plevs, bnds_lat, bnds_lon, station, st_lons, st_lats)
+  
+
+  print*, 'Test code: ok calling axis stuff station'
+  ist = cmor_axis(  &
+       table='Tables/CMIP5_grids',    &
+       table_entry='i_index',       &
+       units=' ',        &  
+       length=nst,                   &
+       coord_vals=station )      
+       
+   
+  print*, 'Test code: ok calling axis stuff pressure',ist
+  ipres = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='plevs',       &
+       units='Pa',                   &
+       length=lev,                   &
+       coord_vals=plevs)
+
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  print*, 'Test code: ok calling axis stuff time',ipres
+  itim = cmor_axis(  &
+       table='Tables/CMIP5_Amon',    &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+        
+  itim2 = cmor_axis(  &
+       table='Tables/CMIP5_Lmon',        &
+       table_entry='time',           &
+       units='days since 2030-1-1',  &
+       length=ntimes,                &
+       interval='1 month')
+
+  
+  ! to make it a station data, we need to define the grid with lon/lat 
+  ! information. CMOR will then add the 'longitude' and 'latitude'
+  ! variables as assosiated to the station data.
+  ! You do not set up lon/lat as axis variables for the station data     
+  ! note - the first parameter has ot be an array (of dim=1 in this example)
+  igrid = cmor_load_table("Tables/CMIP5_grids")
+  igrid = cmor_grid((/ist/), st_lats, st_lons)       
+       
+  write(*,'(a, 12f6.1)') 'lons: ',st_lons
+  write(*,'(a, 12f6.1)') 'lats: ',st_lats
+  
+  !===============================================================
+  print*, ' '
+   
+
+  !  Define variables appearing in IPCC table A1a (2-d variables)
+  DO m=1,4
+     print*, 'Test code: var:  ',m,entry2d(m)
+     if (m.eq.3) then 
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Lmon',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ igrid, itim2 /), &
+          missing_value=missing,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m)) 
+  else  
+     var2d_ids(m) = cmor_variable(    &
+          table='Tables/CMIP5_Amon',  &
+          table_entry=entry2d(m),     & 
+          units=units2d(m),           & 
+          axis_ids=(/ igrid, itim /), &
+          missing_value=missing,       &
+          positive=positive2d(m),     &
+          original_name=varin2d(m))   
+  endif
+     print*, 'Test code: result',var2d_ids(m)
+  ENDDO   
+  
+
+  PRINT*, 'Test code:  '
+  PRINT*, 'Test code: completed everything up to writing output fields '
+  PRINT*, 'Test code:  '
+  time_loop: DO it=1, ntimes
+     
+     ! In the following loops over the 3d and 2d fields, the user-written    
+     ! subroutines (read_3d_input_files and read_2d_input_files) retrieve 
+     ! the requested IPCC table A1c and table A1a fields and store them in 
+     ! data3d and data2d, respectively.  In addition a user-written code 
+     ! (read_time) retrieves the time and time-bounds associated with the 
+     ! time sample (in units of 'days since 1970-1-1', consistent with the 
+     ! axis definitions above).  The bounds are set to the beginning and 
+     ! the end of the month retrieved, indicating the averaging period.
+     
+     ! The user must write a code to obtain the times and time-bounds for
+     !   the time slice.  The following line is simply a place-holder for
+     !   the user's code, which should replace it.
+     
+    call read_time(it, time(1), bnds_time)
+
+    
+!!$     
+!!$     ! Cycle through the 2-d fields, retrieve the requested variable and 
+!!$     ! append each to the appropriate netCDF file.
+!!$     
+     DO m=1,n2d
+        
+        ! The user must write the code that fills the arrays of data
+        ! that will be passed to CMOR.  The following line is simply a
+        ! a place-holder for the user's code, which should replace it.
+        
+        call read_2d_input_files(it, varin2d(m), data2d)    
+        k = 1  
+        DO j = 1, lat
+          data1dtest(k:k+lat) = data2d(:,j) 
+          k = k+lat+1 
+        END DO   
+        !write(*,'(a, 12(f8.1,1x))'), entry2d(m), data1dtest            
+
+        ! append a single time sample of data for a single field to 
+        ! the appropriate netCDF file.
+
+        error_flag = cmor_write(                                  &
+             var_id        = var2d_ids(m),                        &
+             data          = data1dtest,                          &
+             ntimes_passed = 1,                                   &
+             time_vals     = time,                                &
+             time_bnds     = bnds_time  )
+        
+       IF (error_flag < 0) THEN
+           ! write diagnostic messages to standard output device
+           write(*,*) 'Test code:  Error encountered writing IPCC Table A1a ' &
+                // 'field ', entry2d(m), ', which I call ', varin2d(m)
+           write(*,*) 'Test code:  Was processing time sample: ', time 
+                      
+        END IF
+        
+     END DO 
+     
+     
+  END DO time_loop
+
+  error_flag = cmor_close()
+
+end program testing
diff --git a/Test/wegner_test.f90 b/Test/wegner_test.f90
new file mode 100644
index 0000000..70cfd83
--- /dev/null
+++ b/Test/wegner_test.f90
@@ -0,0 +1,447 @@
+module my_subs
+
+contains
+
+subroutine levrein(mlev, alev, blev, zlev, alevb, blevb, zlevb, p0)
+
+integer                             :: mlev
+double precision, intent(INOUT),dimension(mlev)   :: zlev
+double precision, intent(INOUT),dimension(mlev+1) :: zlevb
+real,             dimension(mlev)   :: slev
+real,             intent(INOUT),dimension(mlev)   :: alev, blev
+real,             intent(INOUT),dimension(mlev+1) :: alevb, blevb
+real , intent(inout) :: p0
+p0=101325.0
+
+slev=(/ &
+    0.00000000000000000,&
+ 2000.00000000000000000,&
+ 4000.00000000000000000,&
+ 6000.00000000000000000,&
+ 8000.00000000000000000,&
+ 9976.13671875000000000,&
+11820.53906250000000000,&
+13431.39453125000000000,&
+14736.35546875000000000,&
+15689.20703125000000000,&
+16266.60937500000000000,&
+16465.00390625000000000,&
+16297.62109375000000000,&
+15791.59765625000000000,&
+14985.26953125000000000,&
+13925.51953125000000000,&
+12665.29296875000000000,&
+11261.23046875000000000,&
+ 9771.40625000000000000,&
+ 8253.21093750000000000,&
+ 6761.33984375000000000,&
+ 5345.91406250000000000,&
+ 4050.71777343750000000,&
+ 2911.56933593750000000,&
+ 1954.80517578125000000,&
+ 1195.88989257812500000,&
+  638.14892578125000000,&
+  271.62646484375000000,&
+   72.06358337402343750,&
+    0.00000000000000000,&
+    0.00000000000000000,&
+    0.00000000000000000 /)
+
+do i=1,mlev
+  alev(i)=slev(i)/p0
+end do
+blev=(/ &
+0.00000000000000000,&
+0.00000000000000000,&
+0.00000000000000000,&
+0.00000000000000000,&
+0.00000000000000000,&
+0.00039085815660655,&
+0.00291970069520175,&
+0.00919413194060326,&
+0.02031915634870529,&
+0.03697485849261284,&
+0.05948764085769653,&
+0.08789497613906860,&
+0.12200361490249634,&
+0.16144150495529175,&
+0.20570325851440430,&
+0.25418859720230103,&
+0.30623537302017212,&
+0.36114501953125000,&
+0.41820228099822998,&
+0.47668814659118652,&
+0.53588658571243286,&
+0.59508424997329712,&
+0.65356457233428955,&
+0.71059441566467285,&
+0.76540523767471313,&
+0.81716698408126831,&
+0.86495584249496460,&
+0.90771585702896118,&
+0.94421321153640747,&
+0.97298520803451538,&
+0.99228149652481079,&
+1.00000000000000000 /)
+
+do i=1,mlev
+   zlev(i)=alev(i)+blev(i)
+end do
+do i=2,mlev
+   alevb(i)=abs((alev(i)+alev(i-1))/2)
+end do
+alevb(1)=0.
+alevb(mlev+1)=0.
+
+do i=2,mlev
+   blevb(i)=abs((blev(i)+blev(i-1))/2)
+end do
+blevb(1)=0.
+blevb(mlev+1)=1.0
+
+do i=2,mlev
+   zlevb(i)=abs((zlev(i)+zlev(i-1))/2)
+end do
+zlevb(1)=0.
+zlevb(mlev+1)=1.0
+print*, 'done levrein going out' 
+end subroutine levrein
+
+subroutine latrein(lat, lon, latd, lond, bndslat, bndslon)
+
+double precision, dimension(lon)   :: lond
+double precision, dimension(lat)   :: latd
+double precision, dimension(2,lon) :: bndslon
+double precision, dimension(2,lat) :: bndslat
+double precision, dimension(17)    :: plevs
+
+integer   :: i
+
+lond(1)=0.0
+bndslon(1,1)=-0.9375
+bndslon(2,1)=0.9375
+do i=1,191
+   lond(i+1)     =lond(i)+1.875000
+   bndslon(1,i+1)=lond(i+1)-0.9375
+   bndslon(2,i+1)=lond(i+1)+0.9375
+end do
+
+latd=(/ &
+ -88.572,-86.723,-84.862,-82.999,-81.135,-79.271,-77.406,-75.541,-73.676,-71.811, &
+ -69.946,-68.081,-66.216,-64.351,-62.486,-60.620,-58.755,-56.890,-55.025,-53.160, &
+ -51.294,-49.429,-47.564,-45.699,-43.833,-41.968,-40.103,-38.238,-36.372,-34.507, &
+ -32.642,-30.777,-28.911,-27.046,-25.181,-23.316,-21.450,-19.585,-17.720,-15.855, &
+ -13.989,-12.124,-10.259,-8.394,-6.528,-4.663,-2.798,-0.933, 0.933, 2.798, &
+ 4.663, 6.528, 8.394, 10.259, 12.124, 13.989, 15.855, 17.720, 19.585, 21.450, &
+ 23.316,25.181,27.046,28.911,30.777,32.642,34.507,36.372,38.238,40.103, &
+ 41.968,43.833,45.699,47.564,49.429,51.294,53.160,55.025,56.890,58.755, &
+ 60.620,62.486,64.351,66.216,68.081,69.946,71.811,73.676,75.541,77.406, &
+ 79.271,81.135,82.999,84.862,86.723,88.572 /)
+
+do i=1,95
+   bndslat(2,i)=latd(i)-((latd(i)-(latd(i+1)))/2.)
+   bndslat(1,i+1)=bndslat(2,i)
+end do
+bndslat(1,1)=-90.0
+bndslat(2,96)=90.0
+
+end subroutine latrein
+
+
+subroutine timdatrein(nrec, lev, lat, lon, time, bndstime, data2, data3)
+
+double precision, dimension(nrec) :: time
+double precision, dimension(2,nrec) :: bndstime
+
+real, dimension(lon*lat)         :: dummy2, dummy3
+real, dimension(lon,lat,nrec)    :: data2
+real, dimension(lon,lat,lev,nrec):: data3
+integer                          :: jtime, icode, ilevel, nsize
+integer                          :: i, nyear, ihalf, nrec
+integer                          :: iyear, imon, iday, im, id, itime
+integer                          :: jd1860, jdactu
+character (len=50)               :: filearg
+
+! filenamen als argument fuer program einlesen:
+! filearg 1 ist 2d feld
+! filearg 2 ist 3d feld
+!
+call getarg(1, filearg)
+open(1,file=filearg, form='unformatted')
+call getarg(2, filearg)
+open(2,file=filearg, form='unformatted')
+
+! Zeit seit 1860 01 01 12
+! Julian date 1859 12 31 12
+!
+jd1860 = 31-32075+1461*(1859+4800+(12-14)/12)/4+367*(12-2-(12-14)/12*12) &
+         /12-3*((1859+4900+(12-14)/12)/100)/4
+
+do i=1,nrec
+   read(1) jtime, icode, ilevel,nsize
+   read(1) dummy2
+
+   iyear = int(jtime/10000)
+   im = iyear*100
+   imon = int(jtime/100)-im
+   id = imon*100
+
+   monlen: select case (imon)
+   case(4,6,9,11)
+      iday = 30
+   case(2)
+      if(mod(iyear,4).eq.0) then
+       if (mod(iyear,100).eq.0) then
+          iday = 28
+       else
+          iday = 29
+       endif
+       if(mod(iyear,400).eq.0) iday=29
+      else
+          iday = 28
+      endif
+   case default
+     iday = 31
+   end select monlen
+   ihalf=15
+   print*, itime, iyear, imon, iday
+      jdactu = ihalf-32075+1461*(iyear+4800+(imon-14)/12)/4+367*(imon-2-(imon-14)/12*12) &
+               /12-3*((iyear+4900+(imon-14)/12)/100)/4
+      time(i) = jdactu - jd1860
+      bndstime(1,i) = time(i) - ihalf
+      bndstime(2,i) = time(i) + (iday-ihalf)
+   print*, bndstime(1,i), time(i), bndstime(2,i)
+
+   do j=1,lat
+     do k=1,lon
+       data2(k,j,i)= dummy2(lon*(j-1) + k)
+     end do
+   end do
+  
+   do l=1,lev
+      read(2) jtime, icode, ilevel, nsize
+      read(2) dummy3
+      do j=1,lat
+        do k=1,lon
+          data3(k,j,l,i)= dummy3(lon*(j-1) + k)
+        end do
+      end do
+   end do
+
+end do
+   print*, time
+
+end subroutine timdatrein
+
+end module my_subs
+
+program wegner
+  !
+  use cmor_users_functions
+
+  use my_subs
+
+  implicit none
+
+  !   dimension parameters:
+  ! ---------------------------------
+
+  INTEGER, PARAMETER                 :: nti = 24  
+  INTEGER, PARAMETER                 :: lon = 192       
+  INTEGER, PARAMETER                 :: lat = 96     
+  INTEGER, PARAMETER                 :: lev = 32    
+
+  ! My variable names for IPCC Table A1a fields
+  CHARACTER (LEN=50)                 :: TABLE = 'Test/IPCC_table_A1'
+  CHARACTER (LEN=50)                 :: OUTDIR = 'Test'
+  CHARACTER (LEN=50)                 :: TABELLE = 'Test/IPCC_table_A1'
+  CHARACTER (LEN=5)                  :: varin2d = 'MSLP '
+  CHARACTER (LEN=5)                  :: units2d = 'Pa   '
+  CHARACTER (LEN=5)                  :: posit2d = '     '
+  CHARACTER (LEN=5)                  :: entry2d = 'ps   '
+  CHARACTER (LEN=5)                  :: varin3d = 'CLOUD'
+  CHARACTER (LEN=5)                  :: units3d = '%    '
+  CHARACTER (LEN=5)                  :: entry3d = 'cl   '
+
+  
+  !  uninitialized variables used in communicating with CMOR:
+  !  ---------------------------------------------------------
+
+  INTEGER                            :: error_flag, j,k
+  INTEGER                            :: znondim_id, zfactor_id=1
+  INTEGER                            :: var2d_ids
+  INTEGER                            :: var3d_ids
+  REAL, DIMENSION(lon,lat,nti)       :: data2d
+  REAL, DIMENSION(lon,lat,lev,nti)   :: data3d
+  REAL, DIMENSION(lon,lat)           :: data2d2
+  DOUBLE PRECISION, DIMENSION(lat)   :: alats
+  DOUBLE PRECISION, DIMENSION(lon)   :: alons
+  DOUBLE PRECISION, DIMENSION(nti)   :: time
+  DOUBLE PRECISION, DIMENSION(2,nti) :: bnds_time
+  DOUBLE PRECISION, DIMENSION(2,lat) :: bnds_lat
+  DOUBLE PRECISION, DIMENSION(2,lon) :: bnds_lon
+  DOUBLE PRECISION, DIMENSION(lev)   :: zlevs
+  DOUBLE PRECISION, DIMENSION(lev+1) :: zlev_bnds
+  REAL, DIMENSION(lev)               :: a_coeff, b_coeff
+  REAL, DIMENSION(lev+1)             :: a_coeff_bnds, b_coeff_bnds
+  REAL                               :: p0
+  INTEGER                            :: ilon, ilat, ipres, ilev, itim
+
+  !  Other variables:
+  !  ---------------------
+  
+  INTEGER                            :: it
+  
+  ! read the grid
+  ! --------------------
+  
+  call latrein(lat, lon, alats, alons, bnds_lat, bnds_lon)
+  
+  ! Specify path where tables can be found and indicate that existing 
+  !    netCDF files should not be overwritten.
+  
+  error_flag = cmor_setup(inpath='TABLE',                      &
+               netcdf_file_action='replace',                   &
+               exit_control=1)
+  
+  ! Define dataset as output from  ECHAM5-OM1
+  ! -----------------------------------------
+  error_flag         = cmor_dataset(                           &
+       outpath       = OUTDIR,                                 &
+       experiment_id ='pre-industrial control experiment',     &
+       institution   ='MPI (Max Planck Institute for Meteorology,'  // &
+       'Hamburg, Germany)',                                    &
+       source        ='ECHAM5/MPI-OM(2004):'//                 &
+       'atmosphere:  ECHAM5 (T63L32);'//                       &
+       'ocean:       OM (1x1L41); '//                          &
+       'sea ice:     ECHAM5',                                  &
+       calendar      ='gregorian',                             &
+       realization   =1,                                       &
+       contact = 'Joerg Wegner (wegner at dkrz.de) ',             &
+       history='Output from CERA Database/EH5_OM_20C_1_TEMP2', &
+       comment='anthropogenic forcing only',                   &
+       references='ECHAM5: E. Roeckner et. all, 2003,' //      &
+       'The atmospheric general circulation model ECHAM5' //   & 
+       'Report No. 349' //                                     &
+       'OM: Marsland et. all, 2003,' //                        &
+       'The Max-Planck-Institute global ocean/sea ice model'// &
+       'with orthogonal curvelinear coordinates' //            &
+       'Ocean Modell., 5, 91-127.' )
+  
+  !  Define all axes that will be needed
+
+  ilat = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='latitude',       &
+       units='degrees_north',        &  
+       length=lat,                   &
+       coord_vals=alats,             & 
+       cell_bounds=bnds_lat)        
+      
+  ilon = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='longitude',      &
+       length=lon,                   &
+       units='degrees_east',         &
+       coord_vals=alons,             &
+       cell_bounds=bnds_lon)      
+        
+  !   note that the time axis is defined next, but the time coordinate 
+  !   values and bounds will be passed to cmor through function 
+  !   cmor_write (later, below).
+
+  itim = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='time',           &
+       units='days since 1860-1-1',  &
+       length=nti,                   &
+       interval='12 minutes')
+ 
+  call levrein(lev, a_coeff, b_coeff, zlevs, a_coeff_bnds, b_coeff_bnds, zlev_bnds, p0)
+  print*, 'done levrein'
+  print*, 'sure ?'
+  ilev = cmor_axis(  &
+       table=TABELLE,                &
+       table_entry='standard_hybrid_sigma',&
+       length=lev,                   &
+       units = '1',&
+       coord_vals=zlevs,             &
+       cell_bounds=zlev_bnds)
+
+  error_flag = cmor_zfactor(               &
+       zaxis_id=ilev,                      &
+       zfactor_name='p0',                  &
+       units='Pa',                         &
+       zfactor_values = p0)
+
+  error_flag = cmor_zfactor(               &
+       zaxis_id=ilev,                      & 
+       zfactor_name='b',                   &
+       axis_ids= (/ ilev /),               &
+       zfactor_values = b_coeff,           &
+       zfactor_bounds = b_coeff_bnds  )
+
+  error_flag = cmor_zfactor(               &
+       zaxis_id=ilev,                      &
+       zfactor_name='a',                   &
+       axis_ids= (/ ilev /),               &
+       zfactor_values = a_coeff,           &
+       zfactor_bounds = a_coeff_bnds )
+
+  zfactor_id = cmor_zfactor(               &
+       zaxis_id=ilev,                      &
+       zfactor_name='ps',                  &
+       axis_ids=(/ ilon, ilat, itim /),    &
+       units='Pa' )
+
+  
+     var2d_ids = cmor_variable(            &
+          table=TABELLE,                   &
+          table_entry=entry2d,             & 
+          units=units2d,                   & 
+          axis_ids=(/ ilon, ilat, itim /), &
+          missing_value=1.0e20,            &
+          positive=posit2d,                &
+          original_name=varin2d)   
+
+     var3d_ids = cmor_variable(            &
+          table=TABELLE,                   &
+          table_entry=entry3d,             &
+          units=units3d,                   &
+          axis_ids=(/ ilon, ilat, ilev, itim /),  &
+          missing_value=1.0e20,            &
+          original_name=varin3d)
+
+  print*, ' '
+  print*, 'completed everything up to writing output fields '
+  print*, ' '
+  
+  call timdatrein(nti, lev, lat, lon, time, bnds_time, data2d, data3d)
+
+        
+     error_flag = cmor_write(                               &
+           var_id        = var3d_ids,                       &
+           data          = data3d,                          &
+           ntimes_passed = nti,                             &
+           time_vals     = time,                            &
+           time_bnds     = bnds_time )
+
+     error_flag = cmor_write(                               &
+           var_id        = var2d_ids,                       &
+           data          = data2d,                          &
+           ntimes_passed = nti,                             &
+           time_vals     = time,                            &
+           time_bnds     = bnds_time,                       &
+           store_with    = var3d_ids )
+
+  if (error_flag < 0) then
+ ! write diagnostic messages to standard output device
+           write(*,*) ' Error encountered writing IPCC Table A1a ' &
+               // 'field ', entry2d, ', which I call ', varin2d
+           write(*,*) ' Was processing time sample: ', time 
+  end if
+  !   Close all files opened by CMOR.
+  !   -------------------------------
+  error_flag = cmor_close()  
+ 
+end program wegner
diff --git a/compile_line.txt.in b/compile_line.txt.in
new file mode 100644
index 0000000..253280d
--- /dev/null
+++ b/compile_line.txt.in
@@ -0,0 +1,5 @@
+# The following line will compile "C" code mycode.c with cmor, additional libraries mycode.c may requires should be added to this line
+ @CC@ @DEBUG@ @MACROS@ @CFLAGS@ @CPPFLAGS@  mycode.c -L at prefix@/lib -I at prefix@/include  -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @HDF5CFLAGS@ @HDF5LDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ @ZLDFLAGS@ -o mycode
+
+# The following line will compile "FORTRAN" code mycode.f90 with cmor, additional libraries mycode.f90 may requires should be added to this line
+ at FC@ @DEBUG@ @FCFLAGS@ mycode.f90 -L at prefix@/lib -L. -lcmor @NCCFLAGS@ @NCLDFLAGS@ @HDF5CFLAGS@ @HDF5LDFLAGS@ @UDUNITS2LDFLAGS@ @UDUNITS2FLAGS@ @UUIDLDFLAGS@ @UUIDFLAGS@ @ZFLAGS@ @ZLDFLAGS@ -o mycode
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..917bbc5
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1463 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-07-08'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..1c366df
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1579 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-07-08'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| ms1 \
+	| msp430 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m32c)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| ms1-* \
+	| msp430-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	m32c-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..c485ba9
--- /dev/null
+++ b/configure
@@ -0,0 +1,5763 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for cmor 2.0.
+#
+# Report bugs to <doutriaux1 at llnl.gov>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes && 	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	   done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf at gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='cmor'
+PACKAGE_TARNAME='cmor'
+PACKAGE_VERSION='2.0'
+PACKAGE_STRING='cmor 2.0'
+PACKAGE_BUGREPORT='doutriaux1 at llnl.gov'
+
+ac_default_prefix=/usr/local/cmor
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+PATH
+NCCFLAGS
+NCLDFLAGS
+ZFLAGS
+ZLDFLAGS
+UDUNITS2FLAGS
+UDUNITS2LDFLAGS
+UUIDFLAGS
+UUIDLDFLAGS
+LIBSOURCES
+LIBFSOURCES
+FC
+FFLAGS
+FCFLAGS
+LDFLAGS
+CFLAGS
+INCFILES
+TEST_FORTRAN
+LIBFILES
+VERB
+MODFILES
+MACROS
+DEBUG
+OK_COLOR
+NO_COLOR
+CDATPREFIX
+PYTHONEXEC
+MAKEDEPPYTHON
+MAKETESTPYTHON
+CC
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+CPP
+LN_S
+SED
+RANLIB
+ac_ct_FC
+FCLIBS
+NCCONFIG
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+FC
+FCFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures cmor 2.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/cmor]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of cmor 2.0:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-verbose-test   enable verbose testing (default off)
+  --enable-color          enable colored output (default on)
+  --enable-debug          enable debug flag while commpiling (default on)
+  --enable-fortran        enable fortran api (default will try)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-cdat             enable support for cdat put path root (w/o bin/cdat)
+  --with-python           enable support for python put path root (w/o
+                          bin/python)
+  --with-uuid             enable support for uuid in none standard location
+  --with-udunits2         enable support for udunits2 in none standard
+                          location
+  --with-netcdf           enable support for NetCDF in none standard location
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  FC          Fortran compiler command
+  FCFLAGS     Fortran compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <doutriaux1 at llnl.gov>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+cmor configure 2.0
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by cmor $as_me 2.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+	"$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+SVN_TAG="rev"`./get_svn_version.sh`
+if test ${SVN_TAG} == "rev" ; then
+  SVN_TAG=""
+fi
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+echo "TARGET: "${target_os}
+RTAG="none"
+case ${target_os} in
+ linux-*)
+   RTAG="-Wl,-rpath="
+ ;;
+ darwin*)
+   RTAG="-R"
+ ;;
+esac
+
+CMOR_VERSION=${PACKAGE_VERSION}${SVN_TAG}
+
+
+ac_config_files="$ac_config_files Makefile setup.py compile_line.txt"
+
+
+
+INCFILES="include/cmor.h  include/cmor_func_def.h include/cmor_md5.h "`ls -x --width=10000 include/cdTime/*.h include/cdTime/cdunifpp/*.h`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MACROS=""
+DEBUG=""
+
+OK_COLOR=""
+NO_COLOR=""
+
+# Check whether --enable-verbose-test was given.
+if test "${enable_verbose_test+set}" = set; then
+  enableval=$enable_verbose_test;
+fi
+
+if test "-"${enable_verbose_test} == "-yes" ; then
+  VERB=""
+else
+  VERB=">/dev/null 2>/dev/null"
+fi
+if test "-"${enable_verbose_test} == "-yes" ; then
+  VERB=""
+else
+  VERB=">/dev/null 2>/dev/null"
+fi
+
+# Check whether --enable-color was given.
+if test "${enable_color+set}" = set; then
+  enableval=$enable_color;
+if test "x${enableval}" == "xyes" ; then
+  MACROS=${MACROS}" -DCOLOREDOUTPUT"
+  NO_COLOR="NO_COLOR2"
+  OK_COLOR="OK_COLOR2"
+fi
+
+else
+
+MACROS=${MACROS}" -DCOLOREDOUTPUT"
+NO_COLOR="NO_COLOR2"
+OK_COLOR="OK_COLOR2"
+
+fi
+
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval=$enable_debug; enable_debug=yes
+else
+  enable_debug=yes
+fi
+
+if test ${enable_debug} == "yes" ; then
+  DEBUG="-g"
+fi
+
+LIBFILES="cmor.o cmor_axes.o cmor_variables.o cmor_tables.o cdTimeConv.o cdUtil.o timeConv.o timeArith.o cmor_grids.o cmor_md5.o "
+LIBFFILES="cmor_cfortran_interface.o cmor_fortran_interface.o"
+
+# Check whether --enable-fortran was given.
+if test "${enable_fortran+set}" = set; then
+  enableval=$enable_fortran;
+fi
+
+enable_fortran="-"${enable_fortran}
+TEST_FORTRAN="test_fortran"
+if test ${enable_fortran} == "-no" ; then
+  FC=""
+  F77=""
+  FFLAGS=""
+  FCFLAGS=""
+  TEST_FORTRAN=" "
+  MODFILES=" "
+else
+  LIBFILES=${LIBFILES}" "${LIBFFILES}
+  MODFILES="cmor_users_functions.*"
+fi
+
+CDATPREFIX=" "
+MAKETESTPYTHON=" "
+
+# Check whether --with-cdat was given.
+if test "${with_cdat+set}" = set; then
+  withval=$with_cdat;
+else
+  with_cdat="no"
+fi
+
+with_cdatb="-"${with_cdat}
+if  test ${with_cdatb} != "-yes"   ; then
+  if  test ${with_cdatb} != "-no"  ; then
+    PYTHONEXEC=${with_cdat}/bin/cdat
+    MAKEDEPPYTHON="python"
+    MAKETESTPYTHON="test_python"
+    CDATPREFIX="--prefix="${with_cdat}
+  else
+    PYTHONEXEC=" "
+    MAKEDEPPYTHON=" "
+  fi
+else
+  PYTHONEXEC="cdat"
+  MAKEDEPPYTHON="python"
+  MAKETESTPYTHON="test_python"
+fi
+
+# Check whether --with-python was given.
+if test "${with_python+set}" = set; then
+  withval=$with_python;
+else
+  with_python="no"
+fi
+
+with_pythonb="-"${with_python}
+if  test ${with_pythonb} != "-yes"   ; then
+  if  test ${with_pythonb} != "-no"  ; then
+    PYTHONEXEC=${with_python}/bin/python
+    MAKEDEPPYTHON="python"
+  fi
+else
+  PYTHONEXEC="python"
+  MAKEDEPPYTHON="python"
+fi
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6; }
+fi
+
+{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     # Extract the first word of "sed gsed" to use in msg output
+if test -z "$SED"; then
+set dummy sed gsed; ac_prog_name=$2
+if test "${ac_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_SED_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in sed gsed; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+    # Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_SED_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+SED="$ac_cv_path_SED"
+if test -z "$SED"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in \$PATH" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+echo "${ECHO_T}$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test ${enable_fortran} != "-no" ; then
+  ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_FC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$FC"; then
+  ac_cv_prog_FC="$FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+FC=$ac_cv_prog_FC
+if test -n "$FC"; then
+  { echo "$as_me:$LINENO: result: $FC" >&5
+echo "${ECHO_T}$FC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$FC" && break
+  done
+fi
+if test -z "$FC"; then
+  ac_ct_FC=$FC
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_FC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_FC"; then
+  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_FC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FC=$ac_cv_prog_ac_ct_FC
+if test -n "$ac_ct_FC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_FC" >&5
+echo "${ECHO_T}$ac_ct_FC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_FC" && break
+done
+
+  if test "x$ac_ct_FC" = x; then
+    FC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    FC=$ac_ct_FC
+  fi
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for Fortran compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6; }
+if test "${ac_cv_fc_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FCFLAGS+set}
+ac_save_FFLAGS=$FCFLAGS
+FCFLAGS=
+{ echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5
+echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_fc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FCFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_fc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_prog_fc_g=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_fc_g" >&6; }
+if test "$ac_test_FFLAGS" = set; then
+  FCFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_fc_g = yes; then
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-g -O2"
+  else
+    FCFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-O2"
+  else
+    FCFLAGS=
+  fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to get verbose linking output from $FC" >&5
+echo $ECHO_N "checking how to get verbose linking output from $FC... $ECHO_C" >&6; }
+if test "${ac_cv_prog_fc_v+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_fc_v=
+# Try some options frequently used verbose output
+for ac_verb in -v -verbose --verbose -V -\#\#\#; do
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FFLAGS=$FCFLAGS
+FCFLAGS="$FCFLAGS $ac_verb"
+eval "set x $ac_link"
+shift
+echo "$as_me:$LINENO: $*" >&5
+ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'`
+echo "$ac_fc_v_output" >&5
+FCFLAGS=$ac_save_FFLAGS
+
+rm -f -r conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_fc_v_output="`echo $ac_fc_v_output |
+	grep 'LPATH is:' |
+	sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_fc_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+#        that detects unbalanced quotes in FLIBS should be implemented
+#        and (ugh) tested at some point.
+case $ac_fc_v_output in
+  # If we are using xlf then replace all the commas with spaces.
+  *xlfentry*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
+
+  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+  # $LIBS confuse us, and the libraries appear later in the output anyway).
+  *mGLOB_options_string*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+
+  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+  *-cmdline\ * | *-ignore\ * | *-def\ *)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed "\
+        s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
+        s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
+        s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
+
+  # If we are using Cray Fortran then delete quotes.
+  *cft90*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+esac
+
+
+  # look for -l* and *.a constructs in the output
+  for ac_arg in $ac_fc_v_output; do
+     case $ac_arg in
+        [\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
+          ac_cv_prog_fc_v=$ac_verb
+          break 2 ;;
+     esac
+  done
+done
+if test -z "$ac_cv_prog_fc_v"; then
+   { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $FC" >&5
+echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;}
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: WARNING: compilation failed" >&5
+echo "$as_me: WARNING: compilation failed" >&2;}
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_fc_v" >&5
+echo "${ECHO_T}$ac_cv_prog_fc_v" >&6; }
+{ echo "$as_me:$LINENO: checking for Fortran libraries of $FC" >&5
+echo $ECHO_N "checking for Fortran libraries of $FC... $ECHO_C" >&6; }
+if test "${ac_cv_fc_libs+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$FCLIBS" != "x"; then
+  ac_cv_fc_libs="$FCLIBS" # Let the user override the test.
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FFLAGS=$FCFLAGS
+FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v"
+eval "set x $ac_link"
+shift
+echo "$as_me:$LINENO: $*" >&5
+ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'`
+echo "$ac_fc_v_output" >&5
+FCFLAGS=$ac_save_FFLAGS
+
+rm -f -r conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_fc_v_output="`echo $ac_fc_v_output |
+	grep 'LPATH is:' |
+	sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_fc_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+#        that detects unbalanced quotes in FLIBS should be implemented
+#        and (ugh) tested at some point.
+case $ac_fc_v_output in
+  # If we are using xlf then replace all the commas with spaces.
+  *xlfentry*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
+
+  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+  # $LIBS confuse us, and the libraries appear later in the output anyway).
+  *mGLOB_options_string*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+
+  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+  *-cmdline\ * | *-ignore\ * | *-def\ *)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed "\
+        s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
+        s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
+        s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
+
+  # If we are using Cray Fortran then delete quotes.
+  *cft90*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+esac
+
+
+
+ac_cv_fc_libs=
+
+# Save positional arguments (if any)
+ac_save_positional="$@"
+
+set X $ac_fc_v_output
+while test $# != 1; do
+  shift
+  ac_arg=$1
+  case $ac_arg in
+        [\\/]*.a | ?:[\\/]*.a)
+            ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_arg" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then
+  :
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+
+          ;;
+        -bI:*)
+            ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_arg" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then
+  :
+else
+  if test "$ac_compiler_gnu" = yes; then
+  for ac_link_opt in $ac_arg; do
+    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+  done
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+fi
+
+          ;;
+          # Ignore these flags.
+        -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -LANG:=* | -LIST:* | -LNO:*)
+          ;;
+        -lkernel32)
+          test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+          ;;
+        -[LRuYz])
+          # These flags, when seen by themselves, take an argument.
+          # We remove the space between option and argument and re-iterate
+          # unless we find an empty arg or a new option (starting with -)
+	  case $2 in
+	     "" | -*);;
+	     *)
+		ac_arg="$ac_arg$2"
+		shift; shift
+		set X $ac_arg "$@"
+		;;
+	  esac
+          ;;
+        -YP,*)
+          for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
+              ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_j" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then
+  :
+else
+  ac_arg="$ac_arg $ac_j"
+                               ac_cv_fc_libs="$ac_cv_fc_libs $ac_j"
+fi
+
+          done
+          ;;
+        -[lLR]*)
+            ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_arg" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then
+  :
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+
+          ;;
+	-zallextract*| -zdefaultextract)
+	  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+	  ;;
+          # Ignore everything else.
+  esac
+done
+# restore positional arguments
+set X $ac_save_positional; shift
+
+# We only consider "LD_RUN_PATH" on Solaris systems.  If this is seen,
+# then we insist that the "run path" must be an absolute path (i.e. it
+# must begin with a "/").
+case `(uname -sr) 2>/dev/null` in
+   "SunOS 5"*)
+      ac_ld_run_path=`echo $ac_fc_v_output |
+                        sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
+      test "x$ac_ld_run_path" != x &&
+        if test "$ac_compiler_gnu" = yes; then
+  for ac_link_opt in $ac_ld_run_path; do
+    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+  done
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path"
+fi
+      ;;
+esac
+fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_fc_libs" >&5
+echo "${ECHO_T}$ac_cv_fc_libs" >&6; }
+FCLIBS="$ac_cv_fc_libs"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+
+LDFLAGS=${LDFLAGS}" -lm "
+
+
+
+# Check whether --with-uuid was given.
+if test "${with_uuid+set}" = set; then
+  withval=$with_uuid;
+else
+  with_uuid="no"
+fi
+
+with_uuidb="-"${with_uuid}
+if  test ${with_uuidb} != "-yes"  ; then
+  if  test ${with_uuidb} != "-no"  ; then
+   UUIDFLAGS=" -I${with_uuid}/include"
+   if  test ${RTAG} != "none"  ; then
+     UUIDLDFLAGS=" -L${with_uuid}/lib  ${RTAG}${with_uuid}/lib -luuid"
+   else
+     UUIDLDFLAGS=" -L${with_uuid}/lib -luuid"
+   fi
+  else
+    UUIDLDFLAGS="-luuid"
+    UUIDFLAGS=""
+  fi
+else
+  UUIDLDFLAGS="-luuid"
+  UUIDFLAGS=""
+fi
+
+
+{ echo "$as_me:$LINENO: checking for uuid_create in -luuid" >&5
+echo $ECHO_N "checking for uuid_create in -luuid... $ECHO_C" >&6; }
+if test "${ac_cv_lib_uuid_uuid_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-luuid  ${UUIDFLAGS} ${UUIDLDFLAGS}   $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char uuid_create ();
+int
+main ()
+{
+return uuid_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_uuid_uuid_create=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_uuid_uuid_create=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_create" >&5
+echo "${ECHO_T}$ac_cv_lib_uuid_uuid_create" >&6; }
+if test $ac_cv_lib_uuid_uuid_create = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUUID 1
+_ACEOF
+
+  LIBS="-luuid $LIBS"
+
+else
+  { { echo "$as_me:$LINENO: error: Could not get a working uuid" >&5
+echo "$as_me: error: Could not get a working uuid" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+LIBS=""
+
+# Check whether --with-udunits2 was given.
+if test "${with_udunits2+set}" = set; then
+  withval=$with_udunits2;
+else
+  with_udunits2="no"
+fi
+
+with_udunits2b="-"${with_udunits2}
+if  test ${with_udunits2b} != "-yes"  ; then
+  if  test ${with_udunits2b} != "-no"  ; then
+   UDUNITS2FLAGS=" -I${with_udunits2}/include"
+   if  test ${RTAG} != "none"  ; then
+     UDUNITS2LDFLAGS=" -L${with_udunits2}/lib  ${RTAG}${with_udunits2}/lib -ludunits2 -lexpat"
+   else
+     UDUNITS2LDFLAGS=" -L${with_udunits2}/lib -ludunits2 -lexpat"
+   fi
+  else
+    UDUNITS2FLAGS="-ludunits2"
+    UDUNITS2LDFLAGS=""
+  fi
+else
+  UDUNITS2FLAGS="-ludunits2"
+  UDUNITS2LDFLAGS=""
+fi
+
+{ echo "$as_me:$LINENO: checking for ut_parse in -ludunits2" >&5
+echo $ECHO_N "checking for ut_parse in -ludunits2... $ECHO_C" >&6; }
+if test "${ac_cv_lib_udunits2_ut_parse+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ludunits2  ${UDUNITS2FLAGS} ${UDUNITS2LDFLAGS} -lm   $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ut_parse ();
+int
+main ()
+{
+return ut_parse ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_udunits2_ut_parse=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_udunits2_ut_parse=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_udunits2_ut_parse" >&5
+echo "${ECHO_T}$ac_cv_lib_udunits2_ut_parse" >&6; }
+if test $ac_cv_lib_udunits2_ut_parse = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBUDUNITS2 1
+_ACEOF
+
+  LIBS="-ludunits2 $LIBS"
+
+else
+  { { echo "$as_me:$LINENO: error: Could not get a working udunits2" >&5
+echo "$as_me: error: Could not get a working udunits2" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+LIBS=""
+
+
+
+# Check whether --with-netcdf was given.
+if test "${with_netcdf+set}" = set; then
+  withval=$with_netcdf;
+else
+  with_netcdf="no"
+fi
+
+with_netcdfb="-"${with_netcdf}
+if  test ${with_netcdfb} != "-yes" ; then
+  if  test ${with_netcdfb} != "-no"  ; then
+    as_ac_File=`echo "ac_cv_file_${with_netcdf}/bin/nc-config" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for ${with_netcdf}/bin/nc-config" >&5
+echo $ECHO_N "checking for ${with_netcdf}/bin/nc-config... $ECHO_C" >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  test "$cross_compiling" = yes &&
+  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+if test -r "${with_netcdf}/bin/nc-config"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+ac_res=`eval echo '${'$as_ac_File'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_File'}'` = yes; then
+  HAS_NCCONFIG=yes
+else
+  HAS_NCCONFIG=no
+fi
+
+    if  test ${HAS_NCCONFIG} == "yes"  ; then
+      NCCFLAGS=`${with_netcdf}/bin/nc-config --cflags`
+      NCLDFLAGS=`${with_netcdf}/bin/nc-config --libs`
+    else
+#echo "CRAP!"
+     NCCFLAGS=" -I${with_netcdf}/include"
+     if  test ${RTAG} != "none"  ; then
+      NCLDFLAGS=" -L${with_netcdf}/lib  ${RTAG}${with_netcdf}/lib -lnetcdf"
+     else
+      NCLDFLAGS=" -L${with_netcdf}/lib -lnetcdf"
+     fi
+    fi
+  else
+    NCCFLAGS="-lnetcdf"
+    NCLDFLAGS=""
+  fi
+else
+  # Extract the first word of "nc-config", so it can be a program name with args.
+set dummy nc-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_NCCONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $NCCONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_NCCONFIG="$NCCONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_NCCONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_NCCONFIG" && ac_cv_path_NCCONFIG=""no""
+  ;;
+esac
+fi
+NCCONFIG=$ac_cv_path_NCCONFIG
+if test -n "$NCCONFIG"; then
+  { echo "$as_me:$LINENO: result: $NCCONFIG" >&5
+echo "${ECHO_T}$NCCONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  if  test NCCONFIG != "no"  ; then
+   NCCFLAGS=`${NCCONFIG} --cflags`
+   NCLDFLAGS=`${NCCONFIG} --libs`
+  else
+   NCCFLAGS="-lnetcdf"
+   NCLDFLAGS=""
+  fi
+fi
+
+CFLAGS=${NCCFLAGS}
+LDFLAGS=${NCLDFLAGS}
+
+{ echo "$as_me:$LINENO: checking for nc_inq_var_deflate in -lnetcdf" >&5
+echo $ECHO_N "checking for nc_inq_var_deflate in -lnetcdf... $ECHO_C" >&6; }
+if test "${ac_cv_lib_netcdf_nc_inq_var_deflate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnetcdf ${NCFLAGS} ${NCLDFLAGS}  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char nc_inq_var_deflate ();
+int
+main ()
+{
+return nc_inq_var_deflate ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_netcdf_nc_inq_var_deflate=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_netcdf_nc_inq_var_deflate=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_netcdf_nc_inq_var_deflate" >&5
+echo "${ECHO_T}$ac_cv_lib_netcdf_nc_inq_var_deflate" >&6; }
+if test $ac_cv_lib_netcdf_nc_inq_var_deflate = yes; then
+  HAS_NC4="yes"
+else
+  HAS_NC4="no"
+fi
+
+BUILD_NC3="no"
+HAS_NC3="no"
+OLIBS=${LIBS}
+LIBS="-lnetcdf "${NCCFLAGS}" "${NCLDFLAGS}
+if  test ${HAS_NC4} == "no"  ; then
+    { echo "$as_me:$LINENO: checking for nc_open in -lnetcdf" >&5
+echo $ECHO_N "checking for nc_open in -lnetcdf... $ECHO_C" >&6; }
+if test "${ac_cv_lib_netcdf_nc_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnetcdf ${NCFLAGS} ${NCLDFLAGS}  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char nc_open ();
+int
+main ()
+{
+return nc_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_netcdf_nc_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_netcdf_nc_open=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_netcdf_nc_open" >&5
+echo "${ECHO_T}$ac_cv_lib_netcdf_nc_open" >&6; }
+if test $ac_cv_lib_netcdf_nc_open = yes; then
+  HAS_NC="yes"
+else
+  HAS_NC="no"
+fi
+
+  if  test ${HAS_NCCONFIG} == "yes"  ; then
+    HAS_NC3="yes"
+  else
+        { echo "$as_me:$LINENO: checking if you have netcdf 3.6.3)" >&5
+echo $ECHO_N "checking if you have netcdf 3.6.3)... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+        #include <stdio.h>
+        #include <string.h>
+	#include <stdlib.h>
+        #include <netcdf.h>
+
+int
+main ()
+{
+
+
+     char version[50];
+     int major,minor,patch;
+     strncpy(version,nc_inq_libvers(),50);
+     sscanf(version,"%*c%1d%*c%1d%*c%1d%*s",&major,&minor,&patch);
+     if ((major!=3) && (minor!=6) && (patch!=3)) return 1;
+     return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  BUILD_NC3="no"
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+BUILD_NC3="yes"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    if test ${BUILD_NC3} == "yes"  ; then
+       { echo "$as_me:$LINENO: result: \"no\"" >&5
+echo "${ECHO_T}\"no\"" >&6; }
+       { { echo "$as_me:$LINENO: error: Could not get a working NetCDF" >&5
+echo "$as_me: error: Could not get a working NetCDF" >&2;}
+   { (exit 1); exit 1; }; }
+    else
+       { echo "$as_me:$LINENO: result: \"yes\"" >&5
+echo "${ECHO_T}\"yes\"" >&6; }
+    fi
+    HAS_NC3="yes"
+  fi
+fi
+LIBS=${OLIBS}
+CFLAGS=${CFLAGS}" -Iinclude -Iinclude/cdTime"
+MAINDIR=`pwd`
+
+# Library sources
+LIBSOURCES="Src/cmor.c Src/cmor_variables.c Src/cmor_axes.c Src/cmor_tables.c Src/cmor_grids.c Src/cdTime/cdTimeConv.c Src/cdTime/cdUtil.c Src/cdTime/timeConv.c Src/cdTime/timeArith.c Src/cmor_cfortran_interface.c Src/cmor_md5.c"
+LIBFSOURCES="Src/cmor_fortran_interface.f90"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+t clear
+:clear
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+	g
+	s/^\n//
+	s/\n/ /g
+	p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by cmor $as_me 2.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf at gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+cmor config.status 2.0
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+MKDIR_P='$MKDIR_P'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h |  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "setup.py") CONFIG_FILES="$CONFIG_FILES setup.py" ;;
+    "compile_line.txt") CONFIG_FILES="$CONFIG_FILES compile_line.txt" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+PATH!$PATH$ac_delim
+NCCFLAGS!$NCCFLAGS$ac_delim
+NCLDFLAGS!$NCLDFLAGS$ac_delim
+ZFLAGS!$ZFLAGS$ac_delim
+ZLDFLAGS!$ZLDFLAGS$ac_delim
+UDUNITS2FLAGS!$UDUNITS2FLAGS$ac_delim
+UDUNITS2LDFLAGS!$UDUNITS2LDFLAGS$ac_delim
+UUIDFLAGS!$UUIDFLAGS$ac_delim
+UUIDLDFLAGS!$UUIDLDFLAGS$ac_delim
+LIBSOURCES!$LIBSOURCES$ac_delim
+LIBFSOURCES!$LIBFSOURCES$ac_delim
+FC!$FC$ac_delim
+FFLAGS!$FFLAGS$ac_delim
+FCFLAGS!$FCFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+INCFILES!$INCFILES$ac_delim
+TEST_FORTRAN!$TEST_FORTRAN$ac_delim
+LIBFILES!$LIBFILES$ac_delim
+VERB!$VERB$ac_delim
+MODFILES!$MODFILES$ac_delim
+MACROS!$MACROS$ac_delim
+DEBUG!$DEBUG$ac_delim
+OK_COLOR!$OK_COLOR$ac_delim
+NO_COLOR!$NO_COLOR$ac_delim
+CDATPREFIX!$CDATPREFIX$ac_delim
+PYTHONEXEC!$PYTHONEXEC$ac_delim
+MAKEDEPPYTHON!$MAKEDEPPYTHON$ac_delim
+MAKETESTPYTHON!$MAKETESTPYTHON$ac_delim
+CC!$CC$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+CPP!$CPP$ac_delim
+LN_S!$LN_S$ac_delim
+SED!$SED$ac_delim
+RANLIB!$RANLIB$ac_delim
+ac_ct_FC!$ac_ct_FC$ac_delim
+FCLIBS!$FCLIBS$ac_delim
+NCCONFIG!$NCCONFIG$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 92; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+
+
+
+  esac
+
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: ************************************************************************" >&5
+echo "$as_me: ************************************************************************" >&6;}
+{ echo "$as_me:$LINENO:                               SUMMARY" >&5
+echo "$as_me:                               SUMMARY" >&6;}
+{ echo "$as_me:$LINENO:                             VERSION: ${CMOR_VERSION}" >&5
+echo "$as_me:                             VERSION: ${CMOR_VERSION}" >&6;}
+{ echo "$as_me:$LINENO: ************************************************************************" >&5
+echo "$as_me: ************************************************************************" >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: ........................................................................" >&5
+echo "$as_me: ........................................................................" >&6;}
+{ echo "$as_me:$LINENO: ...                             COMPILERS" >&5
+echo "$as_me: ...                             COMPILERS" >&6;}
+{ echo "$as_me:$LINENO: ........................................................................" >&5
+echo "$as_me: ........................................................................" >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO:             FORTRAN" >&5
+echo "$as_me:             FORTRAN" >&6;}
+if test ${enable_fortran} == "-no" ; then
+  { echo "$as_me:$LINENO:         DISABLED" >&5
+echo "$as_me:         DISABLED" >&6;}
+else
+  { echo "$as_me:$LINENO:  FC=${FC}" >&5
+echo "$as_me:  FC=${FC}" >&6;}
+  { echo "$as_me:$LINENO:  F77=${F77}" >&5
+echo "$as_me:  F77=${F77}" >&6;}
+  { echo "$as_me:$LINENO:  FFLAGS=${FFLAGS}" >&5
+echo "$as_me:  FFLAGS=${FFLAGS}" >&6;}
+  { echo "$as_me:$LINENO:  FCFLAGS=${FCFLAGS}" >&5
+echo "$as_me:  FCFLAGS=${FCFLAGS}" >&6;}
+fi
+{ echo "$as_me:$LINENO: ........................................................................" >&5
+echo "$as_me: ........................................................................" >&6;}
+{ echo "$as_me:$LINENO: ...                             EXTERNALS                            ..." >&5
+echo "$as_me: ...                             EXTERNALS                            ..." >&6;}
+{ echo "$as_me:$LINENO: ........................................................................" >&5
+echo "$as_me: ........................................................................" >&6;}
+if test ${SZLIBFLAGS} != "nosz" ; then
+  { echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+  { echo "$as_me:$LINENO: SZLIB" >&5
+echo "$as_me: SZLIB" >&6;}
+  { echo "$as_me:$LINENO:  CFLAGS  : ${SZLIBFLAGS}" >&5
+echo "$as_me:  CFLAGS  : ${SZLIBFLAGS}" >&6;}
+  { echo "$as_me:$LINENO:  LDFLAGS : ${SZLIBLDFLAGS}" >&5
+echo "$as_me:  LDFLAGS : ${SZLIBLDFLAGS}" >&6;}
+fi
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: UUID" >&5
+echo "$as_me: UUID" >&6;}
+{ echo "$as_me:$LINENO:  CFLAGS  : ${UUIDFLAGS}" >&5
+echo "$as_me:  CFLAGS  : ${UUIDFLAGS}" >&6;}
+{ echo "$as_me:$LINENO:  LDFLAGS : ${UUIDLDFLAGS}" >&5
+echo "$as_me:  LDFLAGS : ${UUIDLDFLAGS}" >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: UDUNITS2" >&5
+echo "$as_me: UDUNITS2" >&6;}
+{ echo "$as_me:$LINENO:  CFLAGS  : ${UDUNITS2FLAGS}" >&5
+echo "$as_me:  CFLAGS  : ${UDUNITS2FLAGS}" >&6;}
+{ echo "$as_me:$LINENO:  LDFLAGS : ${UDUNITS2LDFLAGS}" >&5
+echo "$as_me:  LDFLAGS : ${UDUNITS2LDFLAGS}" >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+if test ${BUILD_NC3} == "no"  ; then
+  if test ${HAS_NC4} == "yes"  ; then
+     { echo "$as_me:$LINENO: NetCDF4" >&5
+echo "$as_me: NetCDF4" >&6;}
+     { echo "$as_me:$LINENO:  CFLAGS  : ${NCCFLAGS}" >&5
+echo "$as_me:  CFLAGS  : ${NCCFLAGS}" >&6;}
+     { echo "$as_me:$LINENO:  LDFLAGS : ${NCLDFLAGS}" >&5
+echo "$as_me:  LDFLAGS : ${NCLDFLAGS}" >&6;}
+  else
+     { echo "$as_me:$LINENO: NetCDF3.6.3" >&5
+echo "$as_me: NetCDF3.6.3" >&6;}
+     { echo "$as_me:$LINENO:  CFLAGS  : ${NCCFLAGS}" >&5
+echo "$as_me:  CFLAGS  : ${NCCFLAGS}" >&6;}
+     { echo "$as_me:$LINENO:  LDFLAGS : ${NCLDFLAGS}" >&5
+echo "$as_me:  LDFLAGS : ${NCLDFLAGS}" >&6;}
+  fi
+else
+     { echo "$as_me:$LINENO: No valid NetCDF found will build NetCDF3.6.3 for you" >&5
+echo "$as_me: No valid NetCDF found will build NetCDF3.6.3 for you" >&6;}
+fi
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO:  PYTHON" >&5
+echo "$as_me:  PYTHON" >&6;}
+if test "-"${PYTHONEXEC} == "-" ; then
+  { echo "$as_me:$LINENO:  Not built, not used it tests" >&5
+echo "$as_me:  Not built, not used it tests" >&6;}
+else
+  { echo "$as_me:$LINENO:  Built using python: ${PYTHONEXEC}" >&5
+echo "$as_me:  Built using python: ${PYTHONEXEC}" >&6;}
+fi
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: Type \"make\" to build cmor" >&5
+echo "$as_me: Type \"make\" to build cmor" >&6;}
+{ echo "$as_me:$LINENO: Type \"make install\" to build and install cmor to ${prefix}" >&5
+echo "$as_me: Type \"make install\" to build and install cmor to ${prefix}" >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: Type \"make test\" to build and test cmor code only" >&5
+echo "$as_me: Type \"make test\" to build and test cmor code only" >&6;}
+{ echo "$as_me:$LINENO: Type \"make test_C\" to build cmor and test C only" >&5
+echo "$as_me: Type \"make test_C\" to build cmor and test C only" >&6;}
+if test "-"${MAKETESTPYTHON} != "-" ; then
+  { echo "$as_me:$LINENO: Will also test for python since your are using CDAT" >&5
+echo "$as_me: Will also test for python since your are using CDAT" >&6;}
+{ echo "$as_me:$LINENO: Type \"make test_python\" to build and test cmor python only" >&5
+echo "$as_me: Type \"make test_python\" to build and test cmor python only" >&6;}
+fi
+if test ${enable_fortran} != "-no" ; then
+  { echo "$as_me:$LINENO: Type \"make test_fortran\" to build cmor and test fortran only" >&5
+echo "$as_me: Type \"make test_fortran\" to build cmor and test fortran only" >&6;}
+else
+  { echo "$as_me:$LINENO: will also test for fortran" >&5
+echo "$as_me: will also test for fortran" >&6;}
+fi
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: You can compile C or FORTRAN code using the compilation lines shown in file: compile_line.txt and printed bellow:" >&5
+echo "$as_me: You can compile C or FORTRAN code using the compilation lines shown in file: compile_line.txt and printed bellow:" >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+{ echo "$as_me:$LINENO: " >&5
+echo "$as_me: " >&6;}
+
+
+cat compile_line.txt
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..3f027fb
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,371 @@
+dnl                                                -*- Autoconf -*-
+dnl  Process this file with autoconf to produce a configure script.
+
+dnl AC_PREREQ(2.59)
+AC_INIT(cmor, 2.0, doutriaux1 at llnl.gov)
+
+SVN_TAG="rev"`./get_svn_version.sh`
+if test ${SVN_TAG} == "rev" ; then
+  SVN_TAG=""
+fi
+
+AC_CANONICAL_TARGET
+echo "TARGET: "${target_os}
+RTAG="none"
+case ${target_os} in
+ linux-*) 
+   RTAG="-Wl,-rpath="
+ ;;
+ darwin*)
+   RTAG="-R"
+ ;;
+esac
+
+CMOR_VERSION=${PACKAGE_VERSION}${SVN_TAG}
+
+AC_PREFIX_DEFAULT([/usr/local/cmor])
+AC_CONFIG_FILES([Makefile setup.py compile_line.txt])
+
+
+INCFILES="include/cmor.h  include/cmor_func_def.h include/cmor_md5.h "`ls -x --width=10000 include/cdTime/*.h include/cdTime/cdunifpp/*.h`
+AC_SUBST(PATH)
+AC_SUBST(NCCFLAGS)
+AC_SUBST(NCLDFLAGS)
+AC_SUBST(ZFLAGS)
+AC_SUBST(ZLDFLAGS)
+AC_SUBST(UDUNITS2FLAGS)
+AC_SUBST(UDUNITS2LDFLAGS)
+AC_SUBST(UUIDFLAGS)
+AC_SUBST(UUIDLDFLAGS)
+AC_SUBST(LIBSOURCES)
+AC_SUBST(LIBFSOURCES)
+AC_SUBST(FC)
+AC_SUBST(FFLAGS)
+AC_SUBST(FCFLAGS)
+AC_SUBST(LDFLAGS)
+AC_SUBST(CFLAGS)
+AC_SUBST(INCFILES)
+AC_SUBST(TEST_FORTRAN)
+AC_SUBST(LIBFILES)
+AC_SUBST(VERB)
+AC_SUBST(MODFILES)
+AC_SUBST(MACROS)
+AC_SUBST(DEBUG)
+AC_SUBST(OK_COLOR)
+AC_SUBST(NO_COLOR)
+
+MACROS=""
+DEBUG=""
+
+OK_COLOR=""
+NO_COLOR=""
+
+AC_ARG_ENABLE([verbose-test],[AS_HELP_STRING([--enable-verbose-test],[enable verbose testing (default off)])])
+if test "-"${enable_verbose_test} == "-yes" ; then
+  VERB=""
+else
+  VERB=">/dev/null 2>/dev/null"
+fi
+if test "-"${enable_verbose_test} == "-yes" ; then
+  VERB=""
+else
+  VERB=">/dev/null 2>/dev/null"
+fi
+
+AC_ARG_ENABLE([color],[AS_HELP_STRING([--enable-color],[enable colored output (default on)])],[
+if test "x${enableval}" == "xyes" ; then
+  MACROS=${MACROS}" -DCOLOREDOUTPUT"
+  NO_COLOR="NO_COLOR2"
+  OK_COLOR="OK_COLOR2"
+fi
+],[ 
+MACROS=${MACROS}" -DCOLOREDOUTPUT" 
+NO_COLOR="NO_COLOR2"
+OK_COLOR="OK_COLOR2"
+])
+AC_ARG_ENABLE([debug],[AS_HELP_STRING([--enable-debug],[enable debug flag while commpiling (default on)])],[enable_debug=yes],[enable_debug=yes])
+if test ${enable_debug} == "yes" ; then
+  DEBUG="-g"
+fi
+
+LIBFILES="cmor.o cmor_axes.o cmor_variables.o cmor_tables.o cdTimeConv.o cdUtil.o timeConv.o timeArith.o cmor_grids.o cmor_md5.o "
+LIBFFILES="cmor_cfortran_interface.o cmor_fortran_interface.o"
+
+dnl ##########################################################
+dnl  Turn on/off fortran
+dnl ##########################################################
+AC_ARG_ENABLE([fortran],[AS_HELP_STRING([--enable-fortran],[enable fortran api (default will try)])])
+enable_fortran="-"${enable_fortran}
+TEST_FORTRAN="test_fortran"
+if test ${enable_fortran} == "-no" ; then
+  FC=""
+  F77=""
+  FFLAGS=""
+  FCFLAGS=""
+  TEST_FORTRAN=" "
+  MODFILES=" "
+else
+  LIBFILES=${LIBFILES}" "${LIBFFILES}
+  MODFILES="cmor_users_functions.*"
+fi
+
+CDATPREFIX=" "
+MAKETESTPYTHON=" "
+dnl turn on/off python
+AC_ARG_WITH([cdat],[AS_HELP_STRING([--with-cdat],[enable support for cdat put path root (w/o bin/cdat)])],[],[with_cdat="no"])
+with_cdatb="-"${with_cdat}
+if [ test ${with_cdatb} != "-yes"  ] ; then
+  if [ test ${with_cdatb} != "-no" ] ; then
+    PYTHONEXEC=${with_cdat}/bin/cdat
+    MAKEDEPPYTHON="python"
+    MAKETESTPYTHON="test_python"
+    CDATPREFIX="--prefix="${with_cdat}
+  else
+    PYTHONEXEC=" "
+    MAKEDEPPYTHON=" "
+  fi
+else
+  PYTHONEXEC="cdat"
+  MAKEDEPPYTHON="python"
+  MAKETESTPYTHON="test_python"
+fi
+AC_ARG_WITH([python],[AS_HELP_STRING([--with-python],[enable support for python put path root (w/o bin/python)])],[],[with_python="no"])
+with_pythonb="-"${with_python}
+if [ test ${with_pythonb} != "-yes"  ] ; then
+  if [ test ${with_pythonb} != "-no" ] ; then
+    PYTHONEXEC=${with_python}/bin/python
+    MAKEDEPPYTHON="python"
+  fi
+else
+  PYTHONEXEC="python"
+  MAKEDEPPYTHON="python"
+fi
+
+AC_SUBST(CDATPREFIX)
+
+AC_SUBST(PYTHONEXEC)
+AC_SUBST(MAKEDEPPYTHON)
+AC_SUBST(MAKETESTPYTHON)
+
+dnl  basic test
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_LN_S
+AC_PROG_SED
+AC_PROG_MKDIR_P
+AC_PROG_RANLIB
+if test ${enable_fortran} != "-no" ; then
+  AC_PROG_FC
+  AC_FC_LIBRARY_LDFLAGS
+fi
+
+LDFLAGS=${LDFLAGS}" -lm "
+
+
+AC_ARG_WITH([uuid],[AS_HELP_STRING([--with-uuid],[enable support for uuid in none standard location])],[],[with_uuid="no"])
+with_uuidb="-"${with_uuid}
+if [ test ${with_uuidb} != "-yes" ] ; then
+  if [ test ${with_uuidb} != "-no" ] ; then
+   UUIDFLAGS=" -I${with_uuid}/include"
+   if [ test ${RTAG} != "none" ] ; then
+     UUIDLDFLAGS=" -L${with_uuid}/lib  ${RTAG}${with_uuid}/lib -luuid"
+   else
+     UUIDLDFLAGS=" -L${with_uuid}/lib -luuid"
+   fi
+  else
+    UUIDLDFLAGS="-luuid"
+    UUIDFLAGS=""
+  fi
+else
+  UUIDLDFLAGS="-luuid"
+  UUIDFLAGS=""
+fi
+AC_CHECK_LIB([uuid],[uuid_create],[],[AC_ERROR([Could not get a working uuid])],[ ${UUIDFLAGS} ${UUIDLDFLAGS}  ])
+
+LIBS=""
+AC_ARG_WITH([udunits2],[AS_HELP_STRING([--with-udunits2],[enable support for udunits2 in none standard location])],[],[with_udunits2="no"])
+with_udunits2b="-"${with_udunits2}
+if [ test ${with_udunits2b} != "-yes" ] ; then
+  if [ test ${with_udunits2b} != "-no" ] ; then
+   UDUNITS2FLAGS=" -I${with_udunits2}/include"
+   if [ test ${RTAG} != "none" ] ; then
+     UDUNITS2LDFLAGS=" -L${with_udunits2}/lib  ${RTAG}${with_udunits2}/lib -ludunits2 -lexpat"
+   else
+     UDUNITS2LDFLAGS=" -L${with_udunits2}/lib -ludunits2 -lexpat"
+   fi
+  else
+    UDUNITS2FLAGS="-ludunits2"
+    UDUNITS2LDFLAGS=""
+  fi
+else
+  UDUNITS2FLAGS="-ludunits2"
+  UDUNITS2LDFLAGS=""
+fi
+AC_CHECK_LIB([udunits2],[ut_parse],[],[AC_ERROR([Could not get a working udunits2])],[ ${UDUNITS2FLAGS} ${UDUNITS2LDFLAGS} -lm  ])
+LIBS=""
+
+
+AC_ARG_WITH([netcdf],[AS_HELP_STRING([--with-netcdf],[enable support for NetCDF in none standard location])],[],[with_netcdf="no"])
+with_netcdfb="-"${with_netcdf}
+if [ test ${with_netcdfb} != "-yes" ]; then
+  if [ test ${with_netcdfb} != "-no" ] ; then
+    AC_CHECK_FILE([${with_netcdf}/bin/nc-config],[HAS_NCCONFIG=yes],[HAS_NCCONFIG=no])
+    if [ test ${HAS_NCCONFIG} == "yes" ] ; then 
+      NCCFLAGS=`${with_netcdf}/bin/nc-config --cflags`
+      NCLDFLAGS=`${with_netcdf}/bin/nc-config --libs`
+    else 
+#echo "CRAP!"
+     NCCFLAGS=" -I${with_netcdf}/include"
+     if [ test ${RTAG} != "none" ] ; then
+      NCLDFLAGS=" -L${with_netcdf}/lib  ${RTAG}${with_netcdf}/lib -lnetcdf"
+     else
+      NCLDFLAGS=" -L${with_netcdf}/lib -lnetcdf"
+     fi
+    fi
+  else
+    NCCFLAGS="-lnetcdf"
+    NCLDFLAGS=""
+  fi
+else
+  AC_PATH_PROG(NCCONFIG,nc-config,"no")
+  if [ test NCCONFIG != "no" ] ; then
+   NCCFLAGS=`${NCCONFIG} --cflags`
+   NCLDFLAGS=`${NCCONFIG} --libs`
+  else
+   NCCFLAGS="-lnetcdf"
+   NCLDFLAGS=""
+  fi
+fi
+
+CFLAGS=${NCCFLAGS}
+LDFLAGS=${NCLDFLAGS}
+
+dnl ok that this point we need to see if it is NC3 or NC4
+AC_CHECK_LIB([netcdf],[nc_inq_var_deflate],[HAS_NC4="yes"],[HAS_NC4="no"],[${NCFLAGS} ${NCLDFLAGS} ])
+BUILD_NC3="no"
+HAS_NC3="no"
+OLIBS=${LIBS}
+LIBS="-lnetcdf "${NCCFLAGS}" "${NCLDFLAGS}
+if [ test ${HAS_NC4} == "no" ] ; then
+  dnl ok couldn't get nc4, lets see if that is a nc3
+  AC_CHECK_LIB([netcdf],[nc_open],[HAS_NC="yes"],[HAS_NC="no"],[${NCFLAGS} ${NCLDFLAGS} ])
+  if [ test ${HAS_NCCONFIG} == "yes" ] ; then
+    HAS_NC3="yes"
+  else
+    dnl need to test if it is version 3.6.3
+    AC_MSG_CHECKING([if you have netcdf 3.6.3)])
+    AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM([
+        #include <stdio.h>
+        #include <string.h>
+	#include <stdlib.h>
+        #include <netcdf.h>
+        ],
+        [ [
+
+     char version[50];
+     int major,minor,patch;
+     strncpy(version,nc_inq_libvers(),50);
+     sscanf(version,"%*c%1d%*c%1d%*c%1d%*s",&major,&minor,&patch);
+     if ((major!=3) && (minor!=6) && (patch!=3)) return 1;
+     return 0;
+        ]])],[BUILD_NC3="no"],[BUILD_NC3="yes"])
+    if [test ${BUILD_NC3} == "yes" ] ; then
+       AC_MSG_RESULT(["no"])
+       AC_ERROR([Could not get a working NetCDF])
+    else
+       AC_MSG_RESULT(["yes"])
+    fi
+    HAS_NC3="yes"
+  fi
+fi
+LIBS=${OLIBS}
+CFLAGS=${CFLAGS}" -Iinclude -Iinclude/cdTime"
+MAINDIR=`pwd`
+
+# Library sources
+LIBSOURCES="Src/cmor.c Src/cmor_variables.c Src/cmor_axes.c Src/cmor_tables.c Src/cmor_grids.c Src/cdTime/cdTimeConv.c Src/cdTime/cdUtil.c Src/cdTime/timeConv.c Src/cdTime/timeArith.c Src/cmor_cfortran_interface.c Src/cmor_md5.c"
+LIBFSOURCES="Src/cmor_fortran_interface.f90"
+
+
+AC_OUTPUT
+
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([************************************************************************])
+AC_MSG_NOTICE([                              SUMMARY])
+AC_MSG_NOTICE([                            VERSION: ${CMOR_VERSION}])
+AC_MSG_NOTICE([************************************************************************])
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([........................................................................])
+AC_MSG_NOTICE([...                             COMPILERS])
+AC_MSG_NOTICE([........................................................................])
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([            FORTRAN])
+if test ${enable_fortran} == "-no" ; then
+  AC_MSG_NOTICE([        DISABLED])
+else
+  AC_MSG_NOTICE([ FC=${FC}])
+  AC_MSG_NOTICE([ F77=${F77}])
+  AC_MSG_NOTICE([ FFLAGS=${FFLAGS}])
+  AC_MSG_NOTICE([ FCFLAGS=${FCFLAGS}])
+fi
+AC_MSG_NOTICE([........................................................................])
+AC_MSG_NOTICE([...                             EXTERNALS                            ...])
+AC_MSG_NOTICE([........................................................................])
+if [test ${SZLIBFLAGS} != "nosz" ]; then
+  AC_MSG_NOTICE([])
+  AC_MSG_NOTICE([SZLIB])
+  AC_MSG_NOTICE([ CFLAGS  : ${SZLIBFLAGS}])
+  AC_MSG_NOTICE([ LDFLAGS : ${SZLIBLDFLAGS}])
+fi
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([UUID])
+AC_MSG_NOTICE([ CFLAGS  : ${UUIDFLAGS}])
+AC_MSG_NOTICE([ LDFLAGS : ${UUIDLDFLAGS}])
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([UDUNITS2])
+AC_MSG_NOTICE([ CFLAGS  : ${UDUNITS2FLAGS}])
+AC_MSG_NOTICE([ LDFLAGS : ${UDUNITS2LDFLAGS}])
+AC_MSG_NOTICE([])
+if [test ${BUILD_NC3} == "no" ] ; then 
+  if [test ${HAS_NC4} == "yes" ] ; then
+     AC_MSG_NOTICE([NetCDF4])
+     AC_MSG_NOTICE([ CFLAGS  : ${NCCFLAGS}])
+     AC_MSG_NOTICE([ LDFLAGS : ${NCLDFLAGS}])
+  else
+     AC_MSG_NOTICE([NetCDF3.6.3])
+     AC_MSG_NOTICE([ CFLAGS  : ${NCCFLAGS}])
+     AC_MSG_NOTICE([ LDFLAGS : ${NCLDFLAGS}])
+  fi
+else
+     AC_MSG_NOTICE([No valid NetCDF found will build NetCDF3.6.3 for you])
+fi
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([ PYTHON])
+if test "-"${PYTHONEXEC} == "-" ; then
+  AC_MSG_NOTICE([ Not built, not used it tests])
+else
+  AC_MSG_NOTICE([ Built using python: ${PYTHONEXEC}])
+fi
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([Type "make" to build cmor])
+AC_MSG_NOTICE([Type "make install" to build and install cmor to ${prefix}])
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([Type "make test" to build and test cmor code only])
+AC_MSG_NOTICE([Type "make test_C" to build cmor and test C only])
+if test "-"${MAKETESTPYTHON} != "-" ; then
+  AC_MSG_NOTICE([Will also test for python since your are using CDAT])
+AC_MSG_NOTICE([Type "make test_python" to build and test cmor python only])
+fi
+if test ${enable_fortran} != "-no" ; then
+  AC_MSG_NOTICE([Type "make test_fortran" to build cmor and test fortran only])
+else
+  AC_MSG_NOTICE([will also test for fortran])
+fi
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([You can compile C or FORTRAN code using the compilation lines shown in file: compile_line.txt and printed bellow:])
+AC_MSG_NOTICE([])
+AC_MSG_NOTICE([])
+
+
+cat compile_line.txt
diff --git a/data/tas_sample.nc b/data/tas_sample.nc
new file mode 100644
index 0000000..602789c
Binary files /dev/null and b/data/tas_sample.nc differ
diff --git a/get_svn_version.sh b/get_svn_version.sh
new file mode 100755
index 0000000..25fbcb2
--- /dev/null
+++ b/get_svn_version.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env sh
+
+if [ "X"${CC} = "X" ] ; then
+    gcc show_svn.c -o a.out ; ./a.out ; rm a.out
+else
+   ${CC} show_svn.c -o a.out ; ./a.out ; rm a.out
+fi
diff --git a/include/cmor.h b/include/cmor.h
new file mode 100644
index 0000000..8a70d40
--- /dev/null
+++ b/include/cmor.h
@@ -0,0 +1,286 @@
+#ifndef CMOR_H
+#define CMOR_H
+#define CMOR_MAX_STRING 1024
+#define CMOR_DEF_ATT_STR_LEN 256
+#define CMOR_MAX_ELEMENTS 500
+#define CMOR_MAX_AXES CMOR_MAX_ELEMENTS*3
+#define CMOR_MAX_VARIABLES CMOR_MAX_ELEMENTS
+#define CMOR_MAX_GRIDS 10
+#define CMOR_MAX_DIMENSIONS 7
+#define CMOR_MAX_ATTRIBUTES 100
+#define CMOR_MAX_ERRORS 10
+#define CMOR_MAX_TABLES 10
+#define CMOR_MAX_GRID_ATTRIBUTES 15
+
+#define CMOR_QUIET 0
+
+#define CMOR_EXIT_ON_MAJOR 0
+#define CMOR_EXIT 1
+#define CMOR_EXIT_ON_WARNING 2
+
+#define CMOR_VERSION_MAJOR 2
+#define CMOR_VERSION_MINOR 0
+#define CMOR_VERSION_PATCH 0
+#define CMOR_CF_VERSION_MAJOR 1
+#define CMOR_CF_VERSION_MINOR 4
+
+#define CMOR_WARNING 20
+#define CMOR_NORMAL 21
+#define CMOR_CRITICAL 22
+
+#define CMOR_N_VALID_CALS 8
+
+#define CMOR_PRESERVE_4 10
+#define CMOR_APPEND_4 11
+#define CMOR_REPLACE_4 12
+#define CMOR_PRESERVE_3 13
+#define CMOR_APPEND_3 14
+#define CMOR_REPLACE_3 15
+#define CMOR_PRESERVE CMOR_PRESERVE_3
+#define CMOR_APPEND CMOR_APPEND_3
+#define CMOR_REPLACE CMOR_REPLACE_3
+
+extern int USE_NETCDF_4;
+extern int CMOR_MODE;
+extern int CMOR_TABLE;
+extern int CMOR_VERBOSITY;
+extern int CMOR_NETCDF_MODE;
+
+extern int cleanup_varid;
+
+extern int cmor_naxes;
+extern int cmor_nvars;
+extern int cmor_ntables;
+extern int cmor_ngrids;
+
+extern int cmor_nerrors;
+extern int cmor_nwarnings;
+
+extern char cmor_input_path[CMOR_MAX_STRING];
+
+extern char cmor_traceback_info[CMOR_MAX_STRING];
+
+typedef struct cmor_grid_ {
+  int id;
+  char mapping[CMOR_MAX_STRING];
+  int nattributes;
+  char attributes_names[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  double attributes_values[CMOR_MAX_GRID_ATTRIBUTES];
+  int axes_ids[CMOR_MAX_DIMENSIONS];
+  int original_axes_ids[CMOR_MAX_DIMENSIONS];
+  int ndims;
+  int istimevarying;
+  int nvertices;
+  double *lons;
+  double *lats;
+  double *blons;
+  double *blats;
+/*   double *area; */
+/*   double *volumes; */
+  int associated_variables[6]; /* for lon/lat/blon/blat/area/volumes */
+} cmor_grid_t;
+
+extern cmor_grid_t cmor_grids[CMOR_MAX_GRIDS];
+
+typedef struct cmor_axis_def_ {
+  int table_id;
+  int climatology;
+  char id[CMOR_MAX_STRING];
+  char standard_name[CMOR_MAX_STRING];
+  char units[CMOR_MAX_STRING];
+  char axis;
+  char positive;
+  char long_name[CMOR_MAX_STRING];
+  char out_name[CMOR_MAX_STRING];
+  char type;
+  char stored_direction;
+  double valid_min;
+  double valid_max;
+  int n_requested;
+  double *requested;
+  char *crequested;
+  char cname[CMOR_MAX_STRING];
+  int n_requested_bounds;
+  double *requested_bounds;
+  double tolerance;
+  double value;
+  double bounds_value[2];
+  char required[CMOR_MAX_STRING];
+  char formula[CMOR_MAX_STRING];
+  char convert_to[CMOR_MAX_STRING];
+  char z_factors[CMOR_MAX_STRING];
+  char z_bounds_factors[CMOR_MAX_STRING];
+  char index_only;
+  int must_have_bounds;
+} cmor_axis_def_t;
+
+typedef struct cmor_axis_ {
+  int ref_table_id;
+  int ref_axis_id;
+  int isgridaxis;
+  char axis;
+  char iunits[CMOR_MAX_STRING];
+  char id[CMOR_MAX_STRING];
+  int length;
+  double *values;
+  double *bounds;
+  char **cvalues;
+  int revert;
+  int offset;
+  char type;
+  char attributes_values_char[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING];
+  double attributes_values_num[CMOR_MAX_ATTRIBUTES];
+  char attributes_type[CMOR_MAX_ATTRIBUTES]; /*stores attributes type */
+  char attributes[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING]; /*stores attributes names */
+  int nattributes ; /* number of character type attributes */
+  int hybrid_in;
+  int hybrid_out;
+  int store_in_netcdf;
+} cmor_axis_t;
+extern cmor_axis_t cmor_axes[CMOR_MAX_AXES];
+
+typedef struct cmor_variable_def_ {
+  int table_id;
+  char id[CMOR_MAX_STRING];
+  char standard_name[CMOR_MAX_STRING];
+  char units[CMOR_MAX_STRING];
+  char cell_methods[CMOR_MAX_STRING];
+  char cell_measures[CMOR_MAX_STRING];
+  char positive;
+  char flag_values[CMOR_MAX_STRING];
+  char flag_meanings[CMOR_MAX_STRING];
+  char long_name[CMOR_MAX_STRING];
+  char comment[CMOR_MAX_STRING];
+  int ndims;
+  int dimensions[CMOR_MAX_DIMENSIONS];
+  char type;
+  float valid_min;
+  float valid_max;
+  float ok_min_mean_abs;
+  float ok_max_mean_abs;
+  int shuffle;
+  int deflate;
+  int deflate_level;
+  char required[CMOR_MAX_STRING];
+  char realm[CMOR_MAX_STRING];
+  char frequency[CMOR_MAX_STRING];
+  char out_name[CMOR_MAX_STRING];
+} cmor_var_def_t;
+
+typedef struct cmor_var_ {
+  int self;
+  int grid_id;
+  int sign;
+  int zfactor;
+  int ref_table_id;
+  int ref_var_id;
+  int initialized;
+  int closed;
+  int nc_var_id;
+  int nc_zfactors[CMOR_MAX_VARIABLES];
+  int nzfactor;
+  int ntimes_written;
+  int ntimes_written_coords[10];
+  int associated_ids[10];
+  int ntimes_written_associated[10];
+  int time_nc_id;
+  int time_bnds_nc_id;
+  char id[CMOR_MAX_STRING];
+  int ndims;
+  int singleton_ids[CMOR_MAX_DIMENSIONS];
+  int axes_ids[CMOR_MAX_DIMENSIONS];
+  int original_order[CMOR_MAX_DIMENSIONS];
+  char attributes_values_char[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING];
+  double attributes_values_num[CMOR_MAX_ATTRIBUTES];
+  char attributes_type[CMOR_MAX_ATTRIBUTES]; /*stores attributes type */
+  char attributes[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING]; /*stores attributes names */
+  int nattributes ; /* number of  attributes */
+  char type;
+  char itype;
+  double missing;
+  double omissing;
+  double tolerance;
+  float valid_min;
+  float valid_max;
+  float ok_min_mean_abs;
+  float ok_max_mean_abs;
+  int shuffle;
+  int deflate;
+  int deflate_level;
+  int nomissing;
+  char iunits[CMOR_MAX_STRING];
+  char ounits[CMOR_MAX_STRING];
+  int isbounds;
+  int needsinit; /* need to be init or associated to file */
+  int zaxis; /* for z vars, associated axis stored here */
+  double *values;
+  double first_time;
+  double last_time;
+  char base_path[CMOR_MAX_STRING];
+  char current_path[CMOR_MAX_STRING];
+  char suffix[CMOR_MAX_STRING];
+  int suffix_has_date;
+} cmor_var_t;
+
+extern cmor_var_t cmor_vars[CMOR_MAX_VARIABLES];
+
+typedef struct cmor_mappings_ {
+  int nattributes;
+  char id[CMOR_MAX_STRING];
+  char attributes_names[CMOR_MAX_GRID_ATTRIBUTES][CMOR_MAX_STRING];
+  char coordinates[CMOR_MAX_STRING];
+} cmor_mappings_t;
+
+typedef struct cmor_table_ {
+  int id;
+  int nvars;
+  int naxes;
+  int nexps;
+  int nmappings;
+  float cf_version;
+  float cmor_version;
+  char project_id[CMOR_MAX_STRING];
+  char table_id[CMOR_MAX_STRING];
+  char expt_ids[CMOR_MAX_ELEMENTS][CMOR_MAX_STRING];
+  char sht_expt_ids[CMOR_MAX_ELEMENTS][CMOR_MAX_STRING];
+  char date[CMOR_MAX_STRING];
+  cmor_axis_def_t axes[CMOR_MAX_ELEMENTS];
+  cmor_var_def_t vars[CMOR_MAX_ELEMENTS];
+  cmor_mappings_t mappings[CMOR_MAX_ELEMENTS];
+  float missing_value;
+  double interval;
+  char URL[CMOR_MAX_STRING];
+  char product[CMOR_MAX_STRING];
+  char realm[CMOR_MAX_STRING];
+  char path[CMOR_MAX_STRING];
+  char required_gbl_att[CMOR_MAX_STRING];
+  char frequency[CMOR_MAX_STRING];
+  char **forcings;
+  int nforcings;
+  unsigned char md5[16];
+} cmor_table_t;
+
+extern cmor_table_t cmor_tables[CMOR_MAX_TABLES];
+
+typedef struct cmor_dataset_def_ {
+  char outpath[CMOR_MAX_STRING];
+  char conventions[CMOR_MAX_STRING];
+  char attributes_names[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING];
+  char attributes_values[CMOR_MAX_ATTRIBUTES][CMOR_MAX_STRING];
+  int nattributes;
+  int realization;
+  int leap_year;
+  int leap_month;
+  int month_lengths[12];
+  int initiated;
+  int associate_file; /*flag to store associated variables separately */
+  int associated_file; /* ncid of associated file */
+  char associated_file_name[CMOR_MAX_STRING]; /*associated file path */
+  char tracking_id[CMOR_MAX_STRING]; /*associated tracking id */
+} cmor_dataset_def;
+
+extern cmor_dataset_def cmor_current_dataset;
+
+/* Now the funcs declarations */
+#include "cmor_func_def.h"
+#endif
diff --git a/include/cmor_func_def.h b/include/cmor_func_def.h
new file mode 100644
index 0000000..661ea14
--- /dev/null
+++ b/include/cmor_func_def.h
@@ -0,0 +1,102 @@
+/* this file contains function definitions for cmor */
+/* cmor.c */
+#ifndef CMOR_FUNC_H
+#define CMOR_FUNC_H
+#include <udunits2.h>
+#include "cdmsint.h"
+#include <stdio.h>
+
+extern void cmor_md5 (FILE *inputfile,unsigned char checksum[16]);
+
+extern void cmor_is_setup(void);
+extern void cmor_add_traceback(char *name);
+extern void cmor_pop_traceback(void);
+extern int cmor_prep_units(char *uunits, char *cunits, ut_unit **user_units,ut_unit **cmor_units,cv_converter **ut_cmor_converter);
+extern int cmor_have_NetCDF4(void);
+extern int cmor_have_NetCDF41min(void);
+extern int cmor_have_NetCDF3(void);
+extern int cmor_have_NetCDF363(void);
+extern void cmor_handle_error(char error_msg[CMOR_MAX_STRING],int level);
+extern int cmor_setup(char *path,int *netcdf, int *verbosity, int *mode, char *logfile, int *cmor_create_subdirectories);
+extern int cmor_put_nc_num_attribute(int ncid,int nc_var_id,char *name, char type, double value, char *var_name);
+extern int cmor_put_nc_char_attribute(int ncid,int nc_var_id,char *name,char *value,char *var_name);
+extern int cmor_set_cur_dataset_attribute(char *name, char *value, int optional);
+extern int cmor_get_cur_dataset_attribute(char *name, char *value);
+extern int cmor_has_cur_dataset_attribute(char *name);
+extern int cmor_dataset(char *outpath, 
+			char *experiment_id,
+			char *institution, 
+			char *source,   
+			char *calendar, 
+			int realization, 
+			char *contact, 
+			char *history, 
+			char *comment, 
+			char *references,	 
+			int leap_year, 
+			int leap_month, 
+			int month_lengths[12],
+			char *model_id,
+			char *forcing,
+			int initialization_method,
+			int physics_version,
+			char *institute_id,
+			char *parent_experiment_id,
+			double *branch_time);
+extern int strncpytrim(char *out, char *in, int max);
+extern int cmor_convert_string_to_list(char *values,char type, void **target, int *nelts);
+extern int cmor_define_zfactors_vars(int var_id,int ncid, int *nc_dim,char *formula_terms,int *nzfactors, int *zfactors, int *nc_zfactors,int i,int dim_bnds);
+extern int cmor_create_output_path(int var_id,char *outpath);
+extern double cmor_convert_interval_to_seconds(double val, char *units);
+extern int cmor_write(int var_id,void *data, char type, char *suffix, int ntimes_passed, double *time_vals, double *time_bounds, int *refvar);
+extern int cmor_close_variable(int var_id, char *file_name, int *preserve);
+extern int cmor_close(void);
+/* cmor_axis.c */
+extern void cmor_init_axis_def(cmor_axis_def_t *axis, int table_id);
+extern int cmor_set_axis_def_att(cmor_axis_def_t *axis,char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] );
+extern void cmor_trim_string(char *in,char *out);
+extern int cmor_calendar_c2i(char *calendar, cdCalenType *ical);
+extern int cmor_convert_time_units( char *inunits, char *outunits, char *loutunits);
+extern int cmor_convert_time_values( void *values_in, char type, int nvalues, double *values_out, char *inunits, char *outunits, char *calin, char *calout);
+extern int cmor_set_axis_attribute(int id, char *attribute_name, char type, void *value);
+extern int cmor_get_axis_attribute(int id, char *attribute_name, char type, void *value);
+extern int cmor_has_axis_attribute(int id, char *attribute_name);
+extern int cmor_check_values_inside_bounds(double *values,double *bounds, int length, char *name);
+extern int cmor_check_monotonic(double *values,int length, char *name,int isbounds, int axis_id);
+extern int cmor_treat_axis_values(int axis_id, double *values, int length, int n_requested, char *units, char *name, int isbounds);
+extern int cmor_check_interval(int axis_id, char *interval, double *values, int nvalues, int isbounds);
+extern int cmor_axis(int *axis_id, char *name,char *units, int length,void *coord_vals, char type, void *cell_bounds,int cell_bounds_ndim,char *interval);
+/* cmor_variable.c */
+extern void cmor_init_var_def(cmor_var_def_t *var, int table_id);
+extern int cmor_is_required_variable_attribute(cmor_var_def_t var, char *attribute_name);
+extern int cmor_has_required_variable_attributes(int var_id);
+extern int cmor_set_variable_attribute(int id, char *attribute_name, char type, void *value);
+extern int cmor_get_variable_attribute(int id, char *attribute_name, void *value);
+extern int cmor_has_variable_attribute(int id, char *attribute_name);
+extern int cmor_get_variable_attribute_names(int id, int *nattributes,char attributes_names[][CMOR_MAX_STRING]);
+extern int cmor_get_variable_attribute_type(int id, char *attribute_name, char *type);
+extern int cmor_zfactor (int *zvar_id,int axis_id, char *name, char *units, int ndims, int axes_ids[], char type, void *values, void *bounds);
+extern int cmor_update_history(int var_id,char *add);
+extern int cmor_variable(int *var_id, char *name, char *units, int ndims, int axes_ids[], char type, void *missing, double *tolerance, char *positive, char*original_name, char *history, char *comment);
+extern int cmor_set_var_def_att(cmor_var_def_t *var,char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] );
+extern int cmor_get_variable_time_length(int *var_id, int *length);
+extern int cmor_get_original_shape(int *var_id, int *shape_array, int *rank, int blank_time);
+extern int cmor_write_var_to_file(int ncid,cmor_var_t *avar,void *data,char itype, int ntimes_passed, double *time_vals, double *time_bounds);
+/* cmor_grid.c */
+extern void cmor_set_mapping_attribute(cmor_mappings_t *mapping,char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] );
+extern void cmor_init_grid_mapping(cmor_mappings_t *mapping,char *id);
+extern int cmor_copy_data(double **dest1, void *data, char type, int nelts);
+extern int cmor_has_grid_attribute(int gid, char *name);
+extern int cmor_get_grid_attribute(int gid, char *name, double *value);
+extern void cmor_convert_value(char *units,char *ctmp,double *tmp);
+extern int cmor_set_grid_attribute(int gid, char *name, double *value, char *units);
+extern int cmor_attribute_in_list(char *name, int n, char (*atts)[CMOR_MAX_STRING]);
+extern int cmor_grid_valid_mapping_attribute_names(char *name, int *natt, char (*att)[CMOR_MAX_STRING],int *ndims, char (*dims)[CMOR_MAX_STRING]);
+extern int cmor_set_grid_mapping(int gid, char *name, int nparam, char **attributes_names, int lparams, double attributes_values[CMOR_MAX_GRID_ATTRIBUTES], char **units, int lnunits );
+extern int cmor_grid(int *grid_id, int ndims, int *axes_ids, char type, void *lat, void *lon, int nvertices, void *blat, void *blon);
+extern void cmor_init_table(cmor_table_t *table, int id);
+extern int cmor_set_dataset_att(cmor_table_t *table, char att[CMOR_MAX_STRING],char val[CMOR_MAX_STRING] );
+extern int cmor_set_table(int table);
+extern int cmor_load_table(char table[CMOR_MAX_STRING], int *table_id);
+extern int cmor_time_varying_grid_coordinate(int *coord_grid_id, int  grid_id, char *name, char *units, char type, void *missing, int *coordinate_type);
+#endif
diff --git a/include/cmor_md5.h b/include/cmor_md5.h
new file mode 100644
index 0000000..5fcf5f0
--- /dev/null
+++ b/include/cmor_md5.h
@@ -0,0 +1,30 @@
+/* See md5.c for explanation and copyright information.  */
+
+/*
+ * $FreeBSD: src/contrib/cvs/lib/md5.h,v 1.2 1999/12/11 15:10:02 peter Exp $
+ */
+
+#ifndef MD5_H
+#define MD5_H
+
+/* Unlike previous versions of this code, uint32 need not be exactly
+   32 bits, merely 32 bits or more.  Choosing a data type which is 32
+   bits instead of 64 is not important; speed is considerably more
+   important.  ANSI guarantees that "unsigned long" will be big enough,
+   and always using it seems to have few disadvantages.  */
+typedef unsigned long cvs_uint32;
+
+struct cvs_MD5Context {
+	cvs_uint32 buf[4];
+	cvs_uint32 bits[2];
+	unsigned char in[64];
+};
+
+void cvs_MD5Init PROTO ((struct cvs_MD5Context *context));
+void cvs_MD5Update PROTO ((struct cvs_MD5Context *context,
+			   unsigned char const *buf, unsigned len));
+void cvs_MD5Final PROTO ((unsigned char digest[16],
+			  struct cvs_MD5Context *context));
+void cvs_MD5Transform PROTO ((cvs_uint32 buf[4], const unsigned char in[64]));
+
+#endif /* !MD5_H */
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..4d4a951
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2005-05-14.22
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+	shift
+	shift
+	continue;;
+
+    -T) no_target_directory=true
+	shift
+	continue;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+	# When -t is used, the destination is already specified.
+	test -n "$dir_arg$dstarg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+	for arg
+	do
+          if test -n "$dstarg"; then
+	    # $@ is not empty: it contains at least $arg.
+	    set fnord "$@" "$dstarg"
+	    shift # fnord
+	  fi
+	  shift # arg
+	  dstarg=$arg
+	done
+	break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dstarg: Is a directory" >&2
+	exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    fi
+  fi
+
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+  # Make sure that the destination directory exists.
+
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+	 '
+    IFS="${IFS-$defaultIFS}"
+
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    shift
+    IFS=$oIFS
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp"
+	# mkdir can fail with a `File exist' error in case several
+	# install-sh are creating the directory concurrently.  This
+	# is OK.
+	test -d "$pathcomp" || exit
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
+
+  if test -n "$dir_arg"; then
+    $doit $mkdircmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+  else
+    dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+    trap '(exit $?); exit' 1 2 13 15
+
+    # Copy the file name to the temp name.
+    $doit $cpprog "$src" "$dsttmp" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+      || {
+	   # The rename failed, perhaps because mv can't rename something else
+	   # to itself, or perhaps because mv is so ancient that it does not
+	   # support -f.
+
+	   # Now remove or move aside any old file at destination location.
+	   # We try this two ways since rm can't unlink itself on some
+	   # systems and the destination file might be busy for other
+	   # reasons.  In this case, the final cleanup might fail but the new
+	   # file should still install successfully.
+	   {
+	     if test -f "$dstdir/$dstfile"; then
+	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	       || {
+		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 (exit 1); exit 1
+	       }
+	     else
+	       :
+	     fi
+	   } &&
+
+	   # Now rename the file to the real destination.
+	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	 }
+    }
+  fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/setup.py.in b/setup.py.in
new file mode 100755
index 0000000..302dcd4
--- /dev/null
+++ b/setup.py.in
@@ -0,0 +1,67 @@
+import numpy
+from numpy.distutils.core import setup, Extension
+#from numpy.distutils.ccompiler import CCompiler
+import os,sys,string
+
+include_dirs = [numpy.lib.utils.get_include(),"include","include/cdTime"]
+
+library_dirs = [ os.path.join("@prefix@","lib") ,'.']
+include_dirs.append(os.path.join("@prefix@","include"))
+libraries = []
+
+for st in ["@NCLDFLAGS@", "@NCCFLAGS@", "@UDUNITS2FLAGS@", "@UDUNITS2LDFLAGS@", "@UUIDFLAGS@", "@UUIDLDFLAGS@"]:
+   sp = st.strip().split()
+   for s in sp:
+      if s[:2]=='-L':
+        library_dirs.append(s[2:])
+      if s[:2]=='-l':
+        libraries.append(s[2:])
+      if s[:2]=='-I':
+        include_dirs.append(s[2:])
+
+srcfiles = "@LIBSOURCES@".split()
+srcfiles.insert(0,os.path.join("Src","_cmormodule.c"))
+
+macros=[]
+for m in "@MACROS@".split():
+   macros.append((m[2:],None))
+   
+ld =[]
+for p in library_dirs:
+   if os.path.exists(p):
+      ld.append(p)
+library_dirs=ld
+
+ld =[]
+for p in include_dirs:
+   if os.path.exists(p):
+      ld.append(p)
+include_dirs=ld
+
+print 'Setting up python module with:'
+print 'libraries:',libraries
+print 'libdir:',library_dirs
+print 'incdir',include_dirs
+print 'src:',srcfiles
+print 'macros:',macros
+
+setup (name = "CMOR",
+       version='2.0',
+       author='Charles Doutriaux, PCMDI',
+       description = "Python Interface to CMOR output library",
+       url = "http://www-pcmdi.llnl.gov/cmor",
+       packages = ['cmor'],
+       package_dir = {'cmor': 'Lib'},
+       ext_modules = [
+    Extension('cmor._cmor',
+              srcfiles,
+	      include_dirs = include_dirs,
+              library_dirs = library_dirs,
+              libraries = libraries,
+              define_macros = macros,
+              extra_compile_args = [ "@DEBUG@", ]
+              ),
+    
+    ]
+      )
+
diff --git a/show_svn.c b/show_svn.c
new file mode 100644
index 0000000..6dcc56c
--- /dev/null
+++ b/show_svn.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <string.h>
+#define R_OK 4
+int main() {
+  FILE *fp;
+  char s1[50],s2[50];
+  int version,i,j ;
+  i = access(".svn/entries",R_OK);
+  if (i < 0) {
+    return 0;
+  }
+  else {
+    fp = popen("svn info| grep Revision ","r");
+    fscanf(fp,"%s%d",s1,&version);
+    printf("%i\n",version);
+  }
+  return 0;
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/cmor.git



More information about the debian-science-commits mailing list