<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.myroms.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arango</id>
	<title>WikiROMS - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.myroms.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arango"/>
	<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/Special:Contributions/Arango"/>
	<updated>2026-04-30T21:31:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6688</id>
		<title>Documentation Portal</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6688"/>
		<updated>2025-09-24T19:38:28Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:AGU Award ArangoMooreWilkin.png|1200px|frameless]]&lt;br /&gt;
&lt;br /&gt;
We are honored to receive the &#039;&#039;&#039;2025 AGU Edward A. Flinn III Award&#039;&#039;&#039;. For over 25 years, we have developed and shared the &#039;&#039;&#039;Regional Ocean Modeling System (ROMS)&#039;&#039;&#039; with the ocean modeling community, which now has thousands of users worldwide. Our work has supported the training and research of the next generation of ocean scientists and operational specialists. Building the advanced capabilities of &#039;&#039;&#039;ROMS&#039;&#039;&#039; truly requires a team. We are grateful to all the multidisciplinary scientists and colleagues who have contributed to &#039;&#039;&#039;ROMS&#039;&#039;&#039;&#039;s development, improvement, applications, dissertations, and hundreds of scientific papers in the literature.&lt;br /&gt;
&lt;br /&gt;
We want to express our gratitude to all the collaborators whose contributions have been invaluable. Specifically, &#039;&#039;&#039;Alexander F. Shchepetkin&#039;&#039;&#039;, &#039;&#039;&#039;John C. Warner&#039;&#039;&#039;, and the &#039;&#039;&#039;ROMS Adjoint Group&#039;&#039;&#039; for their assistance with various numerical algorithms. We also appreciate &#039;&#039;&#039;Kate Hedstrom&#039;&#039;&#039; and &#039;&#039;&#039;David Robertson&#039;&#039;&#039; for their help in managing the &#039;&#039;&#039;ROMS&#039;&#039;&#039; user community and developing the necessary cyberinfrastructure. We are grateful for all the support from funding agencies that made this possible. We extend our heartfelt thanks to the nominator(s), the writers who supported the nomination package, and the selection committee for bestowing this honor upon us.&lt;br /&gt;
&lt;br /&gt;
We dedicate this award to the &#039;&#039;&#039;ROMS community&#039;&#039;&#039;— Hernan, Andy, and John. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Documentation Portal&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;main&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%&amp;quot; |   &amp;lt;!-- Left Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Technical Documentation&#039;&#039;&#039;&lt;br /&gt;
* [[Regional_Ocean_Modeling_System_(ROMS) | Introduction]]&lt;br /&gt;
* [[Equations of Motion]]&lt;br /&gt;
* [[Vertical S-coordinate]]&lt;br /&gt;
* [[Terrain-Following Coordinate Transformation]]&lt;br /&gt;
* [[Curvilinear Coordinates Transformation]]&lt;br /&gt;
* [[Fractional Coordinate System (&amp;amp;xi; - &amp;amp;eta; space)]]&lt;br /&gt;
* [[Time-stepping Schemes Review]]&lt;br /&gt;
* [[Numerical Solution Technique]]&lt;br /&gt;
* [[Nested Grids]]&lt;br /&gt;
* [[Boundary Conditions]]&lt;br /&gt;
* [[Horizontal Mixing]]&lt;br /&gt;
* [[Vertical Mixing Parameterizations]]&lt;br /&gt;
* [[Atmospheric Boundary Layer]]&lt;br /&gt;
* [[Bottom Boundary Layer]]&lt;br /&gt;
* [[Lagrangian Drifters]]&lt;br /&gt;
* [[Balance Term Diagnostics]]&lt;br /&gt;
* [[Biogeochemical Models]]&lt;br /&gt;
* [[Sediment Model]]&lt;br /&gt;
* [[Wave Model]]&lt;br /&gt;
* [[Atmospheric Model]]&lt;br /&gt;
* [[Model Coupling]]&lt;br /&gt;
** [[NUOPC_Cap | ROMS Native ESMF/NUOPC Cap]]&lt;br /&gt;
** [[NUOPC_Cap_UFS | ROMS Stand-Alone ESMF/NUOPC Cap]]&lt;br /&gt;
* [[Model Diagnostics]]&lt;br /&gt;
* [[Sea-Ice Model]]&lt;br /&gt;
* [[Variational Data Assimilation]]&lt;br /&gt;
* [[ROMS-JEDI_Intro| ROMS-JEDI]]&lt;br /&gt;
** [[ROMS-JEDI_Compiling | Compiling]]&lt;br /&gt;
** [[ROMS-JEDI_Implementation | Implementation]]&lt;br /&gt;
** [[ROMS-JEDI_Observations | Observations]]&lt;br /&gt;
** [[ROMS-JEDI_Unit_Test_Cases | Unit Test Cases]]&lt;br /&gt;
* [[IO | ROMS I/O]]&lt;br /&gt;
* [[Bibliography]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Middle Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;User Guide&#039;&#039;&#039;&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Nesting Examples]]&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[Source Code]]&lt;br /&gt;
** [[Git]]&lt;br /&gt;
** [[Modules]]&lt;br /&gt;
** [[Drivers]]&lt;br /&gt;
** [[Subroutines]]&lt;br /&gt;
** [[Variables]]&lt;br /&gt;
** [[Functionals]]&lt;br /&gt;
** [[Lateral Boundary Conditions]]&lt;br /&gt;
* [[C Preprocessor]]&lt;br /&gt;
** [[Options]]&lt;br /&gt;
** [[cppdefs.h]]&lt;br /&gt;
** [[globaldefs.h]]&lt;br /&gt;
* [[Compiling and Linking]]&lt;br /&gt;
** [[makefile]]&lt;br /&gt;
** [[build_roms]]&lt;br /&gt;
** [[my_build_paths]]&lt;br /&gt;
** [[make]]&lt;br /&gt;
** [[gmake]]&lt;br /&gt;
** [[MakeDepend]]&lt;br /&gt;
** [[External Libraries]]&lt;br /&gt;
* [[Parallelization]]&lt;br /&gt;
* [[Benchmarking]]&lt;br /&gt;
* [[Matlab Scripts]]&lt;br /&gt;
* [[Visualization]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Right Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Examples and Applications&#039;&#039;&#039;&lt;br /&gt;
* [[Test Cases]]&lt;br /&gt;
* [[Model Coupling ESMF | Coupling Examples]]&lt;br /&gt;
* [[Lake_Jersey_Refinement_Example_Introduction | Nesting Examples]]&lt;br /&gt;
* [[Application Set-up]]&lt;br /&gt;
* [[Metadata Design]]&lt;br /&gt;
** [[YAML_Parser | YAML Parser]]&lt;br /&gt;
** [[coupling_esmf_atm.yaml]]&lt;br /&gt;
** [[roms_cmeps.yaml]] &lt;br /&gt;
** [[varinfo.yaml]]&lt;br /&gt;
* [[Grid Generation]]&lt;br /&gt;
* [[Initialization]]&lt;br /&gt;
* [[Forcing]]&lt;br /&gt;
** [[Atmospheric Forcing]]&lt;br /&gt;
** [[Tidal Forcing]]&lt;br /&gt;
** [[River Runoff]]&lt;br /&gt;
* [[Input Parameter Files]]&lt;br /&gt;
** [[roms.in]]&lt;br /&gt;
** [[s4dvar.in]]&lt;br /&gt;
** [[biology.in]]&lt;br /&gt;
** [[sediment.in]]&lt;br /&gt;
** [[floats.in]]&lt;br /&gt;
** [[stations.in]]&lt;br /&gt;
** [[ice.in]]&lt;br /&gt;
** [[swan.in]]&lt;br /&gt;
* [[Standard Output Files]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6687</id>
		<title>Documentation Portal</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6687"/>
		<updated>2025-09-24T19:28:28Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:AGU Award ArangoMooreWilkin.png|1200px|frameless]]&lt;br /&gt;
&lt;br /&gt;
We are honored to receive the &#039;&#039;&#039;2025 AGU Edward A. Flinn III Award&#039;&#039;&#039;. For over 25 years, we have developed and shared the &#039;&#039;&#039;Regional Ocean Modeling System (ROMS)&#039;&#039;&#039; with the ocean modeling community, which now has thousands of users worldwide. Our work has supported the training and research of the next generation of ocean scientists and operational specialists. Building the advanced capabilities of &#039;&#039;&#039;ROMS&#039;&#039;&#039; truly requires a team. We are grateful to all the multidisciplinary scientists and colleagues who have contributed to &#039;&#039;&#039;ROMS&#039;&#039;&#039;&#039;s development, improvement, applications, dissertations, and hundreds of scientific papers in the literature.&lt;br /&gt;
&lt;br /&gt;
We want to express our gratitude to all the collaborators whose contributions have been invaluable. Specifically, &#039;&#039;&#039;Alexander F. Shchepetkin&#039;&#039;&#039;, &#039;&#039;&#039;John C. Warner&#039;&#039;&#039;, and the &#039;&#039;&#039;ROMS Adjoint Group&#039;&#039;&#039; for their assistance with various numerical algorithms. We also appreciate &#039;&#039;&#039;Kate Hedstrom&#039;&#039;&#039; and &#039;&#039;&#039;David Robertson&#039;&#039;&#039; for their help in managing the &#039;&#039;&#039;ROMS&#039;&#039;&#039; user community and developing the necessary cyberinfrastructure. We are grateful for all the support from funding agencies that made this possible. We extend our heartfelt thanks to the nominator(s), the writers who supported the nomination package, and the selection committee for bestowing this honor upon us.&lt;br /&gt;
&lt;br /&gt;
We dedicate this award to the &#039;&#039;&#039;ROMS community&#039;&#039;&#039;— Hernan, Andy, and John. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Documentation Portal&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;main&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%&amp;quot; |   &amp;lt;!-- Left Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Technical Documentation&#039;&#039;&#039;&lt;br /&gt;
* [[Regional_Ocean_Modeling_System_(ROMS) | Introduction]]&lt;br /&gt;
* [[Equations of Motion]]&lt;br /&gt;
* [[Vertical S-coordinate]]&lt;br /&gt;
* [[Terrain-Following Coordinate Transformation]]&lt;br /&gt;
* [[Curvilinear Coordinates Transformation]]&lt;br /&gt;
* [[Fractional Coordinate System (&amp;amp;xi; - &amp;amp;eta; space)]]&lt;br /&gt;
* [[Time-stepping Schemes Review]]&lt;br /&gt;
* [[Numerical Solution Technique]]&lt;br /&gt;
* [[Nested Grids]]&lt;br /&gt;
* [[Boundary Conditions]]&lt;br /&gt;
* [[Horizontal Mixing]]&lt;br /&gt;
* [[Vertical Mixing Parameterizations]]&lt;br /&gt;
* [[Atmospheric Boundary Layer]]&lt;br /&gt;
* [[Bottom Boundary Layer]]&lt;br /&gt;
* [[Lagrangian Drifters]]&lt;br /&gt;
* [[Balance Term Diagnostics]]&lt;br /&gt;
* [[Biogeochemical Models]]&lt;br /&gt;
* [[Sediment Model]]&lt;br /&gt;
* [[Wave Model]]&lt;br /&gt;
* [[Atmospheric Model]]&lt;br /&gt;
* [[Model Coupling]]&lt;br /&gt;
** [[NUOPC_Cap | ROMS Native ESMF/NUOPC Cap]]&lt;br /&gt;
** [[NUOPC_Cap_UFS | ROMS Stand-Alone ESMF/NUOPC Cap]]&lt;br /&gt;
* [[Model Diagnostics]]&lt;br /&gt;
* [[Sea-Ice Model]]&lt;br /&gt;
* [[Variational Data Assimilation]]&lt;br /&gt;
* [[ROMS-JEDI_Intro| ROMS-JEDI]]&lt;br /&gt;
** [[ROMS-JEDI_Compiling | Compiling]]&lt;br /&gt;
** [[ROMS-JEDI_Implementation | Implementation]]&lt;br /&gt;
** [[ROMS-JEDI_Observations | Observations]]&lt;br /&gt;
** [[ROMS-JEDI_Unit_Test_Cases | Unit Test Cases]]&lt;br /&gt;
* [[IO | ROMS I/O]]&lt;br /&gt;
* [[Bibliography]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Middle Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;User Guide&#039;&#039;&#039;&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Nesting Examples]]&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[Source Code]]&lt;br /&gt;
** [[Git]]&lt;br /&gt;
** [[Modules]]&lt;br /&gt;
** [[Drivers]]&lt;br /&gt;
** [[Subroutines]]&lt;br /&gt;
** [[Variables]]&lt;br /&gt;
** [[Functionals]]&lt;br /&gt;
** [[Lateral Boundary Conditions]]&lt;br /&gt;
* [[C Preprocessor]]&lt;br /&gt;
** [[Options]]&lt;br /&gt;
** [[cppdefs.h]]&lt;br /&gt;
** [[globaldefs.h]]&lt;br /&gt;
* [[Compiling and Linking]]&lt;br /&gt;
** [[makefile]]&lt;br /&gt;
** [[build_roms]]&lt;br /&gt;
** [[my_build_paths]]&lt;br /&gt;
** [[make]]&lt;br /&gt;
** [[gmake]]&lt;br /&gt;
** [[MakeDepend]]&lt;br /&gt;
** [[External Libraries]]&lt;br /&gt;
* [[Parallelization]]&lt;br /&gt;
* [[Benchmarking]]&lt;br /&gt;
* [[Matlab Scripts]]&lt;br /&gt;
* [[Visualization]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Right Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Examples and Applications&#039;&#039;&#039;&lt;br /&gt;
* [[Test Cases]]&lt;br /&gt;
* [[Model Coupling ESMF | Coupling Examples]]&lt;br /&gt;
* [[Lake_Jersey_Refinement_Example_Introduction | Nesting Examples]]&lt;br /&gt;
* [[Application Set-up]]&lt;br /&gt;
* [[Metadata Design]]&lt;br /&gt;
** [[YAML_Parser | YAML Parser]]&lt;br /&gt;
** [[coupling_esmf_atm.yaml]]&lt;br /&gt;
** [[roms_cmeps.yaml]] &lt;br /&gt;
** [[varinfo.yaml]]&lt;br /&gt;
* [[Grid Generation]]&lt;br /&gt;
* [[Initialization]]&lt;br /&gt;
* [[Forcing]]&lt;br /&gt;
** [[Atmospheric Forcing]]&lt;br /&gt;
** [[Tidal Forcing]]&lt;br /&gt;
** [[River Runoff]]&lt;br /&gt;
* [[Input Parameter Files]]&lt;br /&gt;
** [[roms.in]]&lt;br /&gt;
** [[s4dvar.in]]&lt;br /&gt;
** [[biology.in]]&lt;br /&gt;
** [[sediment.in]]&lt;br /&gt;
** [[floats.in]]&lt;br /&gt;
** [[stations.in]]&lt;br /&gt;
** [[ice.in]]&lt;br /&gt;
** [[swan.in]]&lt;br /&gt;
* [[Standard Output Files]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6686</id>
		<title>Documentation Portal</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6686"/>
		<updated>2025-09-24T19:27:02Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:AGU Award ArangoMooreWilkin.png|1200px|frameless]]&lt;br /&gt;
&lt;br /&gt;
We are honored to receive the &#039;&#039;&#039;2025 AGU Edward A. Flinn III Award&#039;&#039;&#039;. For over 25 years, we have developed and shared the &#039;&#039;&#039;Regional Ocean Modeling System (ROMS)&#039;&#039;&#039; with the ocean modeling community, which now has thousands of users worldwide. Our work has supported the training and research of the next generation of ocean scientists and operational specialists. Building the advanced capabilities of &#039;&#039;&#039;ROMS&#039;&#039;&#039; truly requires a team. We are grateful to all the multidisciplinary scientists and colleagues who have contributed to &#039;&#039;&#039;ROMS&#039;&#039;&#039;&#039;s development, improvement, applications, dissertations, and hundreds of scientific papers in the literature.&lt;br /&gt;
&lt;br /&gt;
We want to express our gratitude to all the collaborators whose contributions have been invaluable. Specifically, &#039;&#039;&#039;Alexander F. Shchepetkin&#039;&#039;&#039;, &#039;&#039;&#039;John C. Warner&#039;&#039;&#039;, and the &#039;&#039;&#039;ROMS Adjoint Group&#039;&#039;&#039; for their assistance with various numerical algorithms. We also appreciate &#039;&#039;&#039;Kate Hedstrom&#039;&#039;&#039; and &#039;&#039;&#039;David Robertson&#039;&#039;&#039; for their help in managing the &#039;&#039;&#039;ROMS&#039;&#039;&#039; user community and developing the necessary cyberinfrastructure. We are grateful for all the support from funding agencies that made this possible. We extend our heartfelt thanks to the nominator(s), the writers who supported the nomination package, and the selection committee for bestowing this honor upon us.&lt;br /&gt;
&lt;br /&gt;
We dedicate this award to the &#039;&#039;&#039;ROMS community&#039;&#039;&#039;— Hernan, Andy, and John. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Documentation Portal&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;main&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%&amp;quot; |   &amp;lt;!-- Left Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Technical Documentation&#039;&#039;&#039;&lt;br /&gt;
* [[Regional_Ocean_Modeling_System_(ROMS) | Introduction]]&lt;br /&gt;
* [[Equations of Motion]]&lt;br /&gt;
* [[Vertical S-coordinate]]&lt;br /&gt;
* [[Terrain-Following Coordinate Transformation]]&lt;br /&gt;
* [[Curvilinear Coordinates Transformation]]&lt;br /&gt;
* [[Fractional Coordinate System (&amp;amp;xi; - &amp;amp;eta; space)]]&lt;br /&gt;
* [[Time-stepping Schemes Review]]&lt;br /&gt;
* [[Numerical Solution Technique]]&lt;br /&gt;
* [[Nested Grids]]&lt;br /&gt;
* [[Boundary Conditions]]&lt;br /&gt;
* [[Horizontal Mixing]]&lt;br /&gt;
* [[Vertical Mixing Parameterizations]]&lt;br /&gt;
* [[Atmospheric Boundary Layer]]&lt;br /&gt;
* [[Bottom Boundary Layer]]&lt;br /&gt;
* [[Lagrangian Drifters]]&lt;br /&gt;
* [[Balance Term Diagnostics]]&lt;br /&gt;
* [[Biogeochemical Models]]&lt;br /&gt;
* [[Sediment Model]]&lt;br /&gt;
* [[Wave Model]]&lt;br /&gt;
* [[Atmospheric Model]]&lt;br /&gt;
* [[Model Coupling]]&lt;br /&gt;
** [[NUOPC_Cap | ROMS Native ESMF/NUOPC Cap]]&lt;br /&gt;
** [[NUOPC_Cap_UFS | ROMS Stand-Alone ESMF/NUOPC Cap]]&lt;br /&gt;
* [[Model Diagnostics]]&lt;br /&gt;
* [[Sea-Ice Model]]&lt;br /&gt;
* [[Variational Data Assimilation]]&lt;br /&gt;
* [[ROMS-JEDI_Intro| ROMS-JEDI]]&lt;br /&gt;
** [[ROMS-JEDI_Compiling | Compiling]]&lt;br /&gt;
** [[ROMS-JEDI_Implementation | Implementation]]&lt;br /&gt;
** [[ROMS-JEDI_Observations | Observations]]&lt;br /&gt;
** [[ROMS-JEDI_Unit_Test_Cases | Unit Test Cases]]&lt;br /&gt;
* [[IO | ROMS I/O]]&lt;br /&gt;
* [[Bibliography]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Middle Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;User Guide&#039;&#039;&#039;&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Nesting Examples]]&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[Source Code]]&lt;br /&gt;
** [[Git]]&lt;br /&gt;
** [[Modules]]&lt;br /&gt;
** [[Drivers]]&lt;br /&gt;
** [[Subroutines]]&lt;br /&gt;
** [[Variables]]&lt;br /&gt;
** [[Functionals]]&lt;br /&gt;
** [[Lateral Boundary Conditions]]&lt;br /&gt;
* [[C Preprocessor]]&lt;br /&gt;
** [[Options]]&lt;br /&gt;
** [[cppdefs.h]]&lt;br /&gt;
** [[globaldefs.h]]&lt;br /&gt;
* [[Compiling and Linking]]&lt;br /&gt;
** [[makefile]]&lt;br /&gt;
** [[build_roms]]&lt;br /&gt;
** [[my_build_paths]]&lt;br /&gt;
** [[make]]&lt;br /&gt;
** [[gmake]]&lt;br /&gt;
** [[MakeDepend]]&lt;br /&gt;
** [[External Libraries]]&lt;br /&gt;
* [[Parallelization]]&lt;br /&gt;
* [[Benchmarking]]&lt;br /&gt;
* [[Matlab Scripts]]&lt;br /&gt;
* [[Visualization]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Right Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Examples and Applications&#039;&#039;&#039;&lt;br /&gt;
* [[Test Cases]]&lt;br /&gt;
* [[Model Coupling ESMF | Coupling Examples]]&lt;br /&gt;
* [[Lake_Jersey_Refinement_Example_Introduction | Nesting Examples]]&lt;br /&gt;
* [[Application Set-up]]&lt;br /&gt;
* [[Metadata Design]]&lt;br /&gt;
** [[YAML_Parser | YAML Parser]]&lt;br /&gt;
** [[coupling_esmf_atm.yaml]]&lt;br /&gt;
** [[roms_cmeps.yaml]] &lt;br /&gt;
** [[varinfo.yaml]]&lt;br /&gt;
* [[Grid Generation]]&lt;br /&gt;
* [[Initialization]]&lt;br /&gt;
* [[Forcing]]&lt;br /&gt;
** [[Atmospheric Forcing]]&lt;br /&gt;
** [[Tidal Forcing]]&lt;br /&gt;
** [[River Runoff]]&lt;br /&gt;
* [[Input Parameter Files]]&lt;br /&gt;
** [[roms.in]]&lt;br /&gt;
** [[s4dvar.in]]&lt;br /&gt;
** [[biology.in]]&lt;br /&gt;
** [[sediment.in]]&lt;br /&gt;
** [[floats.in]]&lt;br /&gt;
** [[stations.in]]&lt;br /&gt;
** [[ice.in]]&lt;br /&gt;
** [[swan.in]]&lt;br /&gt;
* [[Standard Output Files]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=File:AGU_Award_ArangoMooreWilkin.png&amp;diff=6685</id>
		<title>File:AGU Award ArangoMooreWilkin.png</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=File:AGU_Award_ArangoMooreWilkin.png&amp;diff=6685"/>
		<updated>2025-09-24T19:18:33Z</updated>

		<summary type="html">&lt;p&gt;Arango: 2025 Edward A. Flinn III Award&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
2025 Edward A. Flinn III Award&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Git&amp;diff=6670</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Git&amp;diff=6670"/>
		<updated>2024-12-30T16:48:53Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Git&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is now distributed using [https://git-scm.com Git]. The &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository includes the full history since 2002 of changes to the &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code. There are command line and GUI Git clients available for nearly every operating system and a list of popular clients can be found [https://git-scm.com/downloads/guis here]. This page will help you get started with downloading &#039;&#039;&#039;ROMS&#039;&#039;&#039; with Git.&lt;br /&gt;
&lt;br /&gt;
==Git Overview==&lt;br /&gt;
Git is a free and open-source distributed version control system designed to handle everything from small to massive projects quickly and efficiently. All the ROMS files are stored in a Git repository on &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;github.com/myroms&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This Git repository is the official version of the code, which only developers are allowed to change. Users should download the ROMS code to their local machines using a &#039;&#039;&#039;git client&#039;&#039;&#039;. Don&#039;t attempt to use a regular web browser to browse or download files from the Git repository—there are much better tools for interacting with the code repository.&lt;br /&gt;
&lt;br /&gt;
We strongly recommend users check out the current &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;develop&amp;lt;/span&amp;gt; branch, which has the most recent updates and bug fixes. The &#039;&#039;tags&#039;&#039; are mainly kept as a historical record of stable releases after major code upgrades.&lt;br /&gt;
&lt;br /&gt;
If you are making changes yourself, keep them in a separate branch, leaving the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;develop&amp;lt;/span&amp;gt; branch to track changes from the source. Please check the [https://github.com/myroms/roms/wiki/Useful-GIT-Commands ROMS GitHub Wiki] for useful Git commands.&lt;br /&gt;
&lt;br /&gt;
Below is a general description of how Git works. For more detailed information, please review the [https://git-scm.com/book/en/v2 Pro Git] book. We have not tried GUI clients but may add brief how-tos for the most popular GUIs later.&lt;br /&gt;
&lt;br /&gt;
==Configuring GIT==&lt;br /&gt;
&lt;br /&gt;
Before downloading any of &#039;&#039;&#039;ROMS&#039;&#039;&#039; repositories, ensure that your &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039; has the appropriate &#039;&#039;&#039;git-lfs&#039;&#039;&#039; configuration for correctly downloading some &#039;&#039;&#039;&#039;&#039;roms_test&#039;&#039;&#039;&#039;&#039; input and observation NetCDF files. Otherwise, the &#039;&#039;&#039;Test Cases&#039;&#039;&#039; requiring input NetCDF files will fail. The &#039;&#039;&#039;Git LFS&#039;&#039;&#039; is a command line extension and specification for managing large files with &#039;&#039;&#039;Git&#039;&#039;&#039;. A sample of the configuration file looks like this:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;more ~/.gitconf&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;   [User]&amp;lt;br /&amp;gt;        name = GivenName MiddleName FamilyName&amp;lt;br /&amp;gt;        email = your@email&amp;lt;br /&amp;gt;   [credential]&amp;lt;br /&amp;gt;        helper = cache --timeout=7200&amp;lt;br /&amp;gt;        helper = store --file ~/.my-credentials&amp;lt;br /&amp;gt;   [filter &amp;quot;lfs&amp;quot;]&amp;lt;br /&amp;gt;        clean = git-lfs clean -- %f&amp;lt;br /&amp;gt;        smudge = git-lfs smudge -- %f&amp;lt;br /&amp;gt;        process = git-lfs filter-process&amp;lt;br /&amp;gt;        required = true&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may execute &#039;&#039;&#039;git lfs pull&#039;&#039;&#039; at your location of this repository to download a viable version of the &#039;&#039;&#039;Git LFS&#039;&#039;&#039; files from the remote repository in &#039;&#039;&#039;GitHub&#039;&#039;&#039;. Also, to automatically add the &#039;&#039;&#039;LFS&#039;&#039;&#039; filter to your existing &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039;, you could use &#039;&#039;&#039;git lfs install&#039;&#039;&#039; from anywhere in your computer directories.&lt;br /&gt;
&lt;br /&gt;
==Downloading ROMS==&lt;br /&gt;
{{warning}}&#039;&#039;&#039;WARNING:&#039;&#039;&#039; It is strongly suggested that you clone the ROMS source code using the same operating system you wish to compile and run ROMS on. If you download the code on a Windows machine and wish to run it on a non-Windows machine you will need convert the line endings with a utility like &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dos2unix&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;recode&amp;lt;/span&amp;gt;. Even with these utilities you may still have problems compiling ROMS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order download source code from a git repository, &#039;&#039;&#039;git client&#039;&#039;&#039; software must be installed on your local machine. Most Linux distributions come with git, so shell commands may be used without installing additional software. The general form of git commands is:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git&amp;lt;/span&amp;gt; action &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To check-out the files from the ROMS repository &#039;&#039;&#039;develop&#039;&#039;&#039; (latest version), enter (notice https instead of http):&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/myroms/roms.git&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;MyDir&#039;&#039;&#039; is the destination directory on your local computer. It will be created if not found. If &#039;&#039;&#039;MyDir&#039;&#039;&#039; is omitted the code will be downloaded to a directory named &#039;&#039;&#039;roms&#039;&#039;&#039;. You only clone once because Git will keep track of the source, destination and a bunch of other information. For more detail on command line use and syntax, see the [https://git-scm.com/book/en/v2 Pro Git] book.&lt;br /&gt;
&lt;br /&gt;
The idealized and realistic ROMS Test Cases and the Matlab processing software can be downloaded from:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/myroms/roms_test.git &amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/myroms/roms_matlab.git&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We highly recommend that Users clone all the ROMS repositories from the same root directory in their computer and define the &#039;&#039;&#039;ROMS_ROOT_DIR&#039;&#039;&#039; variable in their computer shell login environment, specifying where the User cloned/downloaded the ROMS source code, Test Cases, and Matlab processing software. That is, use the value of pwd from the computer directory where you executed git clone https://github.com/myroms/roms.git&lt;br /&gt;
&lt;br /&gt;
For bash shells:&lt;br /&gt;
    export ROMS_ROOT_DIR=MyDownlodLocationDirectory&lt;br /&gt;
&lt;br /&gt;
For csh/tcsh shells:&lt;br /&gt;
    setenv ROMS_ROOT_DIR  MyDownlodLocationDirectory&lt;br /&gt;
&lt;br /&gt;
The build scripts will use this environmental variable when compiling any of the ROMS Test Cases without the need to customize the location of the ROMS source code. Also, it is used for loading the path of Matlab scripts in the startup.m configuration file.&lt;br /&gt;
&lt;br /&gt;
===Git Hash Revision Information===  &lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; While this is not a required step, we highly recommend it to make bug reporting and tracking easier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to get Git hash revision information in the header for each file, we have created a Git filter that will insert the git hash of the last time a file was modified, similar to the Subversion &#039;&#039;&#039;&#039;&#039;$Id$&#039;&#039;&#039;&#039;&#039; keyword. In order for the filter to work, it has to be explicitly enabled by the user. After the git clone command from above completes change into &amp;lt;span class=&amp;quot;limeGreen&amp;quot;&amp;gt;MyDir&amp;lt;/span&amp;gt; and execute the following:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git config filter.id.smudge &amp;quot;.git_filters/id.smudge %f&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git config filter.id.clean &amp;quot;.git_filters/id.clean %f&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to get the Git Id hashes to fill in, you will need to force the smudge filter to run on the source code you have already downloaded. This takes several minutes but only needs to be done once.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;bash&#039;&#039;&#039; shells execute:	&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rm .git/index&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout HEAD -- &amp;quot;$(git rev-parse --show-toplevel)&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;csh/tcsh&#039;&#039;&#039; shells execute:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rm .git/index&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout HEAD -- &amp;quot;`git rev-parse --show-toplevel`&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you look at the top of any ROMS source file, you will see the Git commit hash for the last time that file was modified. For example, the first few lines of &amp;lt;span class=&amp;quot;limeGreen&amp;quot;&amp;gt;ROMS/Modules/mod_ncparam.F&amp;lt;/span&amp;gt; look like this:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#include &amp;quot;cppdefs.h&amp;quot;&amp;lt;br /&amp;gt;      MODULE mod_ncparam&amp;lt;br /&amp;gt;!&amp;lt;br /&amp;gt;!git $Id: caf970e3 2024-08-09 17:15:26 UTC arango $&amp;lt;br /&amp;gt;!================================================== Hernan G. Arango ===&amp;lt;br /&amp;gt;!  Copyright (c) 2002-2024 The ROMS/TOMS Group                         !&amp;lt;br /&amp;gt;!    Licensed under a MIT/X style license                              !&amp;lt;br /&amp;gt;!    See License_ROMS.md                                               !&amp;lt;br /&amp;gt;!=======================================================================&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then use the 8 character (hexidecimal) Git hash to show more information about that code update:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git show --name-only caf970e3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updates===&lt;br /&gt;
&lt;br /&gt;
Now and again, you might feel the urge to get up to speed with the latest changes that have been made to the ROMS repository. When that happens, simply go to the directory that was &amp;quot;MyDir&amp;quot; above and type:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git pull&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git will remember where you checked out from before and see if a newer revision exists. If so, it will download and apply all the relevant changes.&lt;br /&gt;
&lt;br /&gt;
==Managing Your Own Modifications==&lt;br /&gt;
This assumes that you have a fresh clone of the myroms repository on the &#039;&#039;&#039;develop&#039;&#039;&#039; branch. You want to keep &#039;&#039;&#039;develop&#039;&#039;&#039; as a pure copy of the source version and keep your own changes in say the &#039;&#039;&#039;arctic&#039;&#039;&#039; branch. Start by creating a branch and switching to it:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git branch arctic&amp;lt;br /&amp;gt;&amp;lt;/span&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout arctic&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can make whatever modifications you like (and test them out). To see what changed, you can use &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git status&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git diff&amp;lt;/span&amp;gt;. To save your changes, do a:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git commit -a&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though if you add new files you will have to &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git add&amp;lt;/span&amp;gt; them first.&lt;br /&gt;
&lt;br /&gt;
===Getting the Updates===&lt;br /&gt;
It is easy to fetch and merge the updates. Start by making sure your directory has been cleanly checked in with &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git status&amp;lt;/span&amp;gt;.  Then you can update your &#039;&#039;&#039;develop&#039;&#039;&#039; branch:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout develop&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git pull&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then bring the changes into your &#039;&#039;&#039;arctic&#039;&#039;&#039; branch:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout arctic&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git merge develop&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring in everything that changed since your last &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git pull&amp;lt;/span&amp;gt;, so you might find it easier to keep on top of things by doing this often, not putting it off for years. You can also bring in changes one at a time with &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git cherry-pick&amp;lt;/span&amp;gt;. Again, check the Pro Git book for much more information about all of these operations.&lt;br /&gt;
&lt;br /&gt;
Note that this will save your &#039;&#039;&#039;arctic&#039;&#039;&#039; branch locally, under the .git directory. You can back this up as you would any other important files you have.&lt;br /&gt;
&lt;br /&gt;
==Useful Git Commands==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Command&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git add&#039;&#039;&#039; &amp;lt;_FileName_&amp;gt;&lt;br /&gt;
| Add a file to the repository staging area &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch&#039;&#039;&#039;&lt;br /&gt;
| List all local branches (the asterisk denotes the current branch)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -a&#039;&#039;&#039;&lt;br /&gt;
| List all local and remote branches&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -d&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Delete a local branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -D&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Delete a local branch forcefully&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -m&#039;&#039;&#039; &amp;lt;_OldName_&amp;gt; &amp;lt;_NewName_&amp;gt;&lt;br /&gt;
| Rename a local branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git checkout -b&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Create a new local branch and switch to it&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git checkout&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Switch to an existing local or remote branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git clone&#039;&#039;&#039; &amp;lt;_RepositoryURL_&amp;gt;&lt;br /&gt;
| Clone a public repository&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git commit -am&#039;&#039;&#039; &amp;quot;&amp;lt;_Message_&amp;gt;&amp;quot;&lt;br /&gt;
| Commit changes to all files&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git commit -am&#039;&#039;&#039; &amp;quot;&amp;lt;_Message_&amp;gt;&amp;quot; &#039;&#039;&#039;-m&#039;&#039;&#039; &amp;quot;&amp;lt;_MessageURL_&amp;gt;&amp;quot;&lt;br /&gt;
| Commit changes to all files with two message lines&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git commit --amend -m&#039;&#039;&#039; &amp;quot;&amp;lt;_NewMessage_&amp;gt;&amp;quot;&lt;br /&gt;
| Amend previous commit message&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git diff&#039;&#039;&#039;&lt;br /&gt;
| Show all changes between HEAD and working branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git diff&#039;&#039;&#039; &amp;lt;_FileName_&amp;gt;&lt;br /&gt;
| Show changes for a specific file between HEAD and working branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git difftool -d&#039;&#039;&#039; &amp;lt;_BranchName1_&amp;gt; &amp;lt;_BranchName2_&amp;gt;&lt;br /&gt;
| Compare the difference between two branches with &#039;&#039;&#039;`KDIFF3`&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git fetch&#039;&#039;&#039;&lt;br /&gt;
| Retrieve new work done by other people&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git log&#039;&#039;&#039;&lt;br /&gt;
| View repository changes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git log --oneline&#039;&#039;&#039;&lt;br /&gt;
| Show the list of commits in one-line format&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git log --summary&#039;&#039;&#039;&lt;br /&gt;
| View repository detailed changes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git merge --no-ff --no-commit&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Merge a branch into the active branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git pull&#039;&#039;&#039;&lt;br /&gt;
| Update local repository or branch to the newest origin commit&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git push origin --delete&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Delete a remote branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git push -u origin&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Push changes to the remote repository (and remember the branch)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git reset --hard HEAD~1&#039;&#039;&#039;&lt;br /&gt;
| Undo last commit&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git revert&#039;&#039;&#039; &amp;lt;_CommitID_&amp;gt;&lt;br /&gt;
| Revert commit changes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git status&#039;&#039;&#039;&lt;br /&gt;
| Check/display changes to the repository or particular branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git tag&#039;&#039;&#039;&lt;br /&gt;
| List all tags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Complicated Commands==&lt;br /&gt;
&lt;br /&gt;
If a branch is renamed in a repository on GitHub, the local clone on a computer needs to updated:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;git branch -m OldName NewName&amp;lt;br /&amp;gt;git fetch origin&amp;lt;br /&amp;gt;git branch -u origin/NewName NewName&amp;lt;br /&amp;gt;git remote set-head origin -a&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How to merge changes in the &#039;&#039;&#039;feature/name1&#039;&#039;&#039; branch into the &#039;&#039;&#039;feature/name2&#039;&#039;&#039; branch:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;git checkout feature/name1&amp;lt;br /&amp;gt;git pull&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;git checkout feature/name2&amp;lt;br /&amp;gt;git pull&amp;lt;br /&amp;gt;git merge --no-ff --no-commit feature/name1&amp;lt;br /&amp;gt;git commit -am &amp;quot;Merging feature/name1 into feature/name2&amp;quot; -m &amp;quot;MessageURL&amp;quot;&amp;lt;br /&amp;gt;git difftool -d feature/name1 feature/name2&amp;lt;br /&amp;gt;git push -u origin feature/name2&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Git&amp;diff=6669</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Git&amp;diff=6669"/>
		<updated>2024-12-30T16:44:54Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Git Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Git&amp;lt;/div&amp;gt;&lt;br /&gt;
ROMS source code is now distributed using [https://git-scm.com Git]. The [https://subversion.apache.org Subversion](SVN) repository is being phased out and will no longer be updated starting January 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt;, 2025. The GitHub repository includes the full history of changes to the ROMS source code. There are command line and GUI Git clients available for nearly every operating system and a list of popular clients can be found [https://git-scm.com/downloads/guis here]. This page will help you get started with downloading ROMS with Git.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; For instructions using the deprecated and soon to be discontinued myroms.org git repository, click [[Talk:Git|here]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; Details on using the deprecated and soon to be discontinued Subversion repository can be found [[Subversion|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Git Overview==&lt;br /&gt;
Git is a free and open-source distributed version control system designed to handle everything from small to huge projects quickly and efficiently. All the ROMS files are stored in a Git repository on &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;github.com/myroms&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This Git repository is the official version of the code, which only developers are allowed to change. Users should download the ROMS code to their local machines using a &#039;&#039;&#039;git client&#039;&#039;&#039;. Don&#039;t attempt to use a regular web browser to browse or download files from the Git repository—there are much better tools for interacting with the code repository.&lt;br /&gt;
&lt;br /&gt;
We strongly recommend users check out the current &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;develop&amp;lt;/span&amp;gt; branch, which has the most recent updates and bug fixes. The &#039;&#039;tags&#039;&#039; are mainly kept as a historical record of stable releases after major code upgrades.&lt;br /&gt;
&lt;br /&gt;
If you are making changes yourself, keep them in a separate branch, leaving the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;develop&amp;lt;/span&amp;gt; branch to track changes from the source. Please check the [https://github.com/myroms/roms/wiki/Useful-GIT-Commands ROMS GitHub Wiki] for useful Git commands.&lt;br /&gt;
&lt;br /&gt;
Below is a general description of how Git works. For more detailed information, please review the [https://git-scm.com/book/en/v2 Pro Git] book. We have not tried GUI clients but may add brief how-tos for the most popular GUIs later.&lt;br /&gt;
&lt;br /&gt;
==Configuring GIT==&lt;br /&gt;
&lt;br /&gt;
Before downloading any of &#039;&#039;&#039;ROMS&#039;&#039;&#039; repositories, ensure that your &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039; has the appropriate &#039;&#039;&#039;git-lfs&#039;&#039;&#039; configuration for correctly downloading some &#039;&#039;&#039;&#039;&#039;roms_test&#039;&#039;&#039;&#039;&#039; input and observation NetCDF files. Otherwise, the &#039;&#039;&#039;Test Cases&#039;&#039;&#039; requiring input NetCDF files will fail. The &#039;&#039;&#039;Git LFS&#039;&#039;&#039; is a command line extension and specification for managing large files with &#039;&#039;&#039;Git&#039;&#039;&#039;. A sample of the configuration file looks like this:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;more ~/.gitconf&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;   [User]&amp;lt;br /&amp;gt;        name = GivenName MiddleName FamilyName&amp;lt;br /&amp;gt;        email = your@email&amp;lt;br /&amp;gt;   [credential]&amp;lt;br /&amp;gt;        helper = cache --timeout=7200&amp;lt;br /&amp;gt;        helper = store --file ~/.my-credentials&amp;lt;br /&amp;gt;   [filter &amp;quot;lfs&amp;quot;]&amp;lt;br /&amp;gt;        clean = git-lfs clean -- %f&amp;lt;br /&amp;gt;        smudge = git-lfs smudge -- %f&amp;lt;br /&amp;gt;        process = git-lfs filter-process&amp;lt;br /&amp;gt;        required = true&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may execute &#039;&#039;&#039;git lfs pull&#039;&#039;&#039; at your location of this repository to download a viable version of the &#039;&#039;&#039;Git LFS&#039;&#039;&#039; files from the remote repository in &#039;&#039;&#039;GitHub&#039;&#039;&#039;. Also, to automatically add the &#039;&#039;&#039;LFS&#039;&#039;&#039; filter to your existing &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039;, you could use &#039;&#039;&#039;git lfs install&#039;&#039;&#039; from anywhere in your computer directories.&lt;br /&gt;
&lt;br /&gt;
==Downloading ROMS==&lt;br /&gt;
{{warning}}&#039;&#039;&#039;WARNING:&#039;&#039;&#039; It is strongly suggested that you clone the ROMS source code using the same operating system you wish to compile and run ROMS on. If you download the code on a Windows machine and wish to run it on a non-Windows machine you will need convert the line endings with a utility like &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dos2unix&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;recode&amp;lt;/span&amp;gt;. Even with these utilities you may still have problems compiling ROMS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order download source code from a git repository, &#039;&#039;&#039;git client&#039;&#039;&#039; software must be installed on your local machine. Most Linux distributions come with git, so shell commands may be used without installing additional software. The general form of git commands is:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git&amp;lt;/span&amp;gt; action &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To check-out the files from the ROMS repository &#039;&#039;&#039;develop&#039;&#039;&#039; (latest version), enter (notice https instead of http):&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/myroms/roms.git&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;MyDir&#039;&#039;&#039; is the destination directory on your local computer. It will be created if not found. If &#039;&#039;&#039;MyDir&#039;&#039;&#039; is omitted the code will be downloaded to a directory named &#039;&#039;&#039;roms&#039;&#039;&#039;. You only clone once because Git will keep track of the source, destination and a bunch of other information. For more detail on command line use and syntax, see the [https://git-scm.com/book/en/v2 Pro Git] book.&lt;br /&gt;
&lt;br /&gt;
The idealized and realistic ROMS Test Cases and the Matlab processing software can be downloaded from:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/myroms/roms_test.git &amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/myroms/roms_matlab.git&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We highly recommend that Users clone all the ROMS repositories from the same root directory in their computer and define the &#039;&#039;&#039;ROMS_ROOT_DIR&#039;&#039;&#039; variable in their computer shell login environment, specifying where the User cloned/downloaded the ROMS source code, Test Cases, and Matlab processing software. That is, use the value of pwd from the computer directory where you executed git clone https://github.com/myroms/roms.git&lt;br /&gt;
&lt;br /&gt;
For bash shells:&lt;br /&gt;
    export ROMS_ROOT_DIR=MyDownlodLocationDirectory&lt;br /&gt;
&lt;br /&gt;
For csh/tcsh shells:&lt;br /&gt;
    setenv ROMS_ROOT_DIR  MyDownlodLocationDirectory&lt;br /&gt;
&lt;br /&gt;
The build scripts will use this environmental variable when compiling any of the ROMS Test Cases without the need to customize the location of the ROMS source code. Also, it is used for loading the path of Matlab scripts in the startup.m configuration file.&lt;br /&gt;
&lt;br /&gt;
===Git Hash Revision Information===  &lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; While this is not a required step, we highly recommend it to make bug reporting and tracking easier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to get Git hash revision information in the header for each file, we have created a Git filter that will insert the git hash of the last time a file was modified, similar to the Subversion &#039;&#039;&#039;&#039;&#039;$Id$&#039;&#039;&#039;&#039;&#039; keyword. In order for the filter to work, it has to be explicitly enabled by the user. After the git clone command from above completes change into &amp;lt;span class=&amp;quot;limeGreen&amp;quot;&amp;gt;MyDir&amp;lt;/span&amp;gt; and execute the following:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git config filter.id.smudge &amp;quot;.git_filters/id.smudge %f&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git config filter.id.clean &amp;quot;.git_filters/id.clean %f&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to get the Git Id hashes to fill in, you will need to force the smudge filter to run on the source code you have already downloaded. This takes several minutes but only needs to be done once.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;bash&#039;&#039;&#039; shells execute:	&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rm .git/index&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout HEAD -- &amp;quot;$(git rev-parse --show-toplevel)&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;csh/tcsh&#039;&#039;&#039; shells execute:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rm .git/index&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout HEAD -- &amp;quot;`git rev-parse --show-toplevel`&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you look at the top of any ROMS source file, you will see the Git commit hash for the last time that file was modified. For example, the first few lines of &amp;lt;span class=&amp;quot;limeGreen&amp;quot;&amp;gt;ROMS/Modules/mod_ncparam.F&amp;lt;/span&amp;gt; look like this:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#include &amp;quot;cppdefs.h&amp;quot;&amp;lt;br /&amp;gt;      MODULE mod_ncparam&amp;lt;br /&amp;gt;!&amp;lt;br /&amp;gt;!git $Id: caf970e3 2024-08-09 17:15:26 UTC arango $&amp;lt;br /&amp;gt;!================================================== Hernan G. Arango ===&amp;lt;br /&amp;gt;!  Copyright (c) 2002-2024 The ROMS/TOMS Group                         !&amp;lt;br /&amp;gt;!    Licensed under a MIT/X style license                              !&amp;lt;br /&amp;gt;!    See License_ROMS.md                                               !&amp;lt;br /&amp;gt;!=======================================================================&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then use the 8 character (hexidecimal) Git hash to show more information about that code update:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git show --name-only caf970e3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updates===&lt;br /&gt;
&lt;br /&gt;
Now and again, you might feel the urge to get up to speed with the latest changes that have been made to the ROMS repository. When that happens, simply go to the directory that was &amp;quot;MyDir&amp;quot; above and type:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git pull&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git will remember where you checked out from before and see if a newer revision exists. If so, it will download and apply all the relevant changes.&lt;br /&gt;
&lt;br /&gt;
==Managing Your Own Modifications==&lt;br /&gt;
This assumes that you have a fresh clone of the myroms repository on the &#039;&#039;&#039;develop&#039;&#039;&#039; branch. You want to keep &#039;&#039;&#039;develop&#039;&#039;&#039; as a pure copy of the source version and keep your own changes in say the &#039;&#039;&#039;arctic&#039;&#039;&#039; branch. Start by creating a branch and switching to it:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git branch arctic&amp;lt;br /&amp;gt;&amp;lt;/span&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout arctic&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can make whatever modifications you like (and test them out). To see what changed, you can use &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git status&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git diff&amp;lt;/span&amp;gt;. To save your changes, do a:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git commit -a&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though if you add new files you will have to &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git add&amp;lt;/span&amp;gt; them first.&lt;br /&gt;
&lt;br /&gt;
===Getting the Updates===&lt;br /&gt;
It is easy to fetch and merge the updates. Start by making sure your directory has been cleanly checked in with &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git status&amp;lt;/span&amp;gt;.  Then you can update your &#039;&#039;&#039;develop&#039;&#039;&#039; branch:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout develop&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git pull&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then bring the changes into your &#039;&#039;&#039;arctic&#039;&#039;&#039; branch:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git checkout arctic&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git merge develop&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring in everything that changed since your last &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git pull&amp;lt;/span&amp;gt;, so you might find it easier to keep on top of things by doing this often, not putting it off for years. You can also bring in changes one at a time with &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git cherry-pick&amp;lt;/span&amp;gt;. Again, check the Pro Git book for much more information about all of these operations.&lt;br /&gt;
&lt;br /&gt;
Note that this will save your &#039;&#039;&#039;arctic&#039;&#039;&#039; branch locally, under the .git directory. You can back this up as you would any other important files you have.&lt;br /&gt;
&lt;br /&gt;
==Useful Git Commands==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Command&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git add&#039;&#039;&#039; &amp;lt;_FileName_&amp;gt;&lt;br /&gt;
| Add a file to the repository staging area &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch&#039;&#039;&#039;&lt;br /&gt;
| List all local branches (the asterisk denotes the current branch)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -a&#039;&#039;&#039;&lt;br /&gt;
| List all local and remote branches&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -d&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Delete a local branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -D&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Delete a local branch forcefully&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git branch -m&#039;&#039;&#039; &amp;lt;_OldName_&amp;gt; &amp;lt;_NewName_&amp;gt;&lt;br /&gt;
| Rename a local branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git checkout -b&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Create a new local branch and switch to it&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git checkout&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Switch to an existing local or remote branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git clone&#039;&#039;&#039; &amp;lt;_RepositoryURL_&amp;gt;&lt;br /&gt;
| Clone a public repository&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git commit -am&#039;&#039;&#039; &amp;quot;&amp;lt;_Message_&amp;gt;&amp;quot;&lt;br /&gt;
| Commit changes to all files&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git commit -am&#039;&#039;&#039; &amp;quot;&amp;lt;_Message_&amp;gt;&amp;quot; &#039;&#039;&#039;-m&#039;&#039;&#039; &amp;quot;&amp;lt;_MessageURL_&amp;gt;&amp;quot;&lt;br /&gt;
| Commit changes to all files with two message lines&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git commit --amend -m&#039;&#039;&#039; &amp;quot;&amp;lt;_NewMessage_&amp;gt;&amp;quot;&lt;br /&gt;
| Amend previous commit message&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git diff&#039;&#039;&#039;&lt;br /&gt;
| Show all changes between HEAD and working branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git diff&#039;&#039;&#039; &amp;lt;_FileName_&amp;gt;&lt;br /&gt;
| Show changes for a specific file between HEAD and working branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git difftool -d&#039;&#039;&#039; &amp;lt;_BranchName1_&amp;gt; &amp;lt;_BranchName2_&amp;gt;&lt;br /&gt;
| Compare the difference between two branches with &#039;&#039;&#039;`KDIFF3`&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git fetch&#039;&#039;&#039;&lt;br /&gt;
| Retrieve new work done by other people&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git log&#039;&#039;&#039;&lt;br /&gt;
| View repository changes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git log --oneline&#039;&#039;&#039;&lt;br /&gt;
| Show the list of commits in one-line format&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git log --summary&#039;&#039;&#039;&lt;br /&gt;
| View repository detailed changes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git merge --no-ff --no-commit&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Merge a branch into the active branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git pull&#039;&#039;&#039;&lt;br /&gt;
| Update local repository or branch to the newest origin commit&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git push origin --delete&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Delete a remote branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git push -u origin&#039;&#039;&#039; &amp;lt;_BranchName_&amp;gt;&lt;br /&gt;
| Push changes to the remote repository (and remember the branch)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git reset --hard HEAD~1&#039;&#039;&#039;&lt;br /&gt;
| Undo last commit&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git revert&#039;&#039;&#039; &amp;lt;_CommitID_&amp;gt;&lt;br /&gt;
| Revert commit changes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git status&#039;&#039;&#039;&lt;br /&gt;
| Check/display changes to the repository or particular branch&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;git tag&#039;&#039;&#039;&lt;br /&gt;
| List all tags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Complicated Commands==&lt;br /&gt;
&lt;br /&gt;
If a branch is renamed in a repository on GitHub, the local clone on a computer needs to updated:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;git branch -m OldName NewName&amp;lt;br /&amp;gt;git fetch origin&amp;lt;br /&amp;gt;git branch -u origin/NewName NewName&amp;lt;br /&amp;gt;git remote set-head origin -a&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How to merge changes in the &#039;&#039;&#039;feature/name1&#039;&#039;&#039; branch into the &#039;&#039;&#039;feature/name2&#039;&#039;&#039; branch:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;git checkout feature/name1&amp;lt;br /&amp;gt;git pull&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;git checkout feature/name2&amp;lt;br /&amp;gt;git pull&amp;lt;br /&amp;gt;git merge --no-ff --no-commit feature/name1&amp;lt;br /&amp;gt;git commit -am &amp;quot;Merging feature/name1 into feature/name2&amp;quot; -m &amp;quot;MessageURL&amp;quot;&amp;lt;br /&amp;gt;git difftool -d feature/name1 feature/name2&amp;lt;br /&amp;gt;git push -u origin feature/name2&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=External_Libraries&amp;diff=6668</id>
		<title>External Libraries</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=External_Libraries&amp;diff=6668"/>
		<updated>2024-12-28T02:03:43Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* ARPACK (ARnoldi PACKage) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;External Libraries&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the ROMS configuration, several third-party libraries are required for linking and compiling an application.&lt;br /&gt;
&lt;br /&gt;
==ARPACK (ARnoldi PACKage)==&lt;br /&gt;
Serial and parallel legacy libraries applied to solve large eigenvalue problems using either the Implicitly Restarted Arnoldi Method (&#039;&#039;&#039;IRAM&#039;&#039;&#039;) for sparse matrices or the Lanczos algorithm for symmetric matrices.  It includes a subset of the &#039;&#039;&#039;BLAS&#039;&#039;&#039; and &#039;&#039;&#039;LAPACK&#039;&#039;&#039; libraries. Some of its functions are used in 4D-Var and the adjoint-based stability analysis propagators.&lt;br /&gt;
&lt;br /&gt;
To obtain &#039;&#039;&#039;ARPACK&#039;&#039;&#039;, execute the following:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/myroms/roms_libs.git&amp;lt;br /&amp;gt;&amp;gt; cd roms_libraries/ARPACK&amp;lt;/div&amp;gt;&lt;br /&gt;
To compile, customize &#039;&#039;&#039;ARmake.inc&#039;&#039;&#039; for the desired compiler and its flags for the serial (&#039;&#039;&#039;FC&#039;&#039;&#039; and &#039;&#039;&#039;FFLAGS&#039;&#039;&#039;) and parallel (&#039;&#039;&#039;PFC&#039;&#039;&#039; and &#039;&#039;&#039;PFFLAGS&#039;&#039;&#039;) versions of the library. Once configured type:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make lib plib&amp;lt;/div&amp;gt; to build &#039;&#039;&#039;libarpack.a&#039;&#039;&#039; and &#039;&#039;&#039;libparpack.a&#039;&#039;&#039;. Once the libraries are built you can move them anywhere you like to make it easier to tell ROMS where to find them through environmental variables or with the &#039;&#039;&#039;[[my_build_paths]]&#039;&#039;&#039; script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; Prior to SVN revision 1080 (July 23, 2021), &#039;&#039;&#039;ARPACK&#039;&#039;&#039; was distributed in the ROMS &#039;&#039;&#039;Lib/ARPACK&#039;&#039;&#039; subdirectory. For more information about why this was changed see TRAC ticket [https://www.myroms.org/projects/src/ticket/891 #891]&lt;br /&gt;
&lt;br /&gt;
==ESMF (Earth System Modeling Framework)==&lt;br /&gt;
High-performance, open-source library for grid interpolation, remapping, and data exchange between coupled Earth System Model (&#039;&#039;&#039;ESM&#039;&#039;&#039;) components.  It includes the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; (National Unified Operation Prediction Capability) layer that provides templates and protocols for sequential and concurrent coupling between ESM components.  The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &#039;&#039;cap&#039;&#039; file is a Fortran module layer that sits on top of each &#039;&#039;&#039;ESM&#039;&#039;&#039; component that provides the protocols and methods to interact and share data in a coupled system.&lt;br /&gt;
&lt;br /&gt;
ROMS supports version 8.0 or higher since the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; layer includes the native CoupleSets for &#039;&#039;&#039;ESM&#039;&#039;&#039; applications with nested grids. Various types of connections are possible, like &#039;&#039;&#039;nest-to-nest&#039;&#039;&#039;, &#039;&#039;&#039;fine-to-coarse&#039;&#039;&#039;, or &#039;&#039;&#039;coarse-to-fine&#039;&#039;&#039;.  The user decides which nested grids to connect.&lt;br /&gt;
&lt;br /&gt;
*Download from github:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/esmf-org/esmf.git esmf&amp;lt;br /&amp;gt;&amp;gt; cd esmf&amp;lt;br /&amp;gt;&amp;gt; git checkout tags/ESMF_8_1_0&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Configure with environment variables:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; export ESMF_DIR=/projects/dmcs_1/src/esmf&amp;lt;br /&amp;gt;&amp;gt; export ESMF_COMM=mvapich2&amp;lt;br /&amp;gt;&amp;gt; export ESMF_COMPILER=intel&amp;lt;br /&amp;gt;&amp;gt; export ESMF_BOPT=O&amp;lt;br /&amp;gt;&amp;gt; export ESMF_OPTLEVEL=3&amp;lt;br /&amp;gt;&amp;gt; export ESMF_ABI=64&amp;lt;br /&amp;gt;&amp;gt; export ESMF_INSTALL_PREFIX=/ESMF/install/dir ESMF_NETCDF=&amp;quot;/path/to/netcdf/bin/nc-config&amp;quot;&amp;lt;br /&amp;gt;&amp;gt; export ESMF_NETCDF_LIBS=&amp;quot;-lnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl -lhdf5_hl -lhdf5 -lm -lz -lcurl&amp;quot;&amp;lt;br /&amp;gt;&amp;gt; export ESMF_NETCDF_LIBPATH=&amp;quot;/path/to/netcdf/lib /path/to/hdf5/lib&amp;quot;&amp;lt;br /&amp;gt;&amp;gt; export ESMF_SHARED_LIB_BUILD=OFF&amp;lt;br /&amp;gt;&amp;gt; export ESMF_MPIRUN=/path/to/cluster/submission/script&amp;lt;/div&amp;gt;{{note}} Note that &#039;&#039;ESMF_MPIRUN&#039;&#039; is only needed for running test on clusters that use scheduling systems like SLURM. Your submission script should take &#039;&#039;&#039;-np&#039;&#039;&#039;, &#039;&#039;&#039;N&#039;&#039;&#039; (number of processes requested), and &#039;&#039;&#039;programName&#039;&#039;&#039; (in that order) as arguments to construct the appropriate command to run using the scheduling system on your cluster. A SLURM example is provided below:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;# 1) &amp;lt;this_script&amp;gt; -np N prog&amp;lt;br /&amp;gt;#    runs N copies of executable &amp;quot;prog&amp;quot; in parallel. The script must hide all&amp;lt;br /&amp;gt;#    of the system specific details, such as going through a queueing system&amp;lt;br /&amp;gt;#    and/or calling a system specific mpirun script with modified arguments.&amp;lt;br /&amp;gt;#&amp;lt;br /&amp;gt;# 2) The output of the application must arrive at the calling shell via&amp;lt;br /&amp;gt;#    stdout and stderr.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;if [ &amp;quot;$1&amp;quot; != &amp;quot;-np&amp;quot; ]&amp;lt;br /&amp;gt;then&amp;lt;br /&amp;gt;        echo &amp;quot;Usage: mpirun -np # prog&amp;quot;&amp;lt;br /&amp;gt;        exit 1&amp;lt;br /&amp;gt;fi&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;num_procs=$2&amp;lt;br /&amp;gt;shift 2&amp;lt;br /&amp;gt;prog=$*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;echo &amp;quot;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;quot;&amp;lt;br /&amp;gt;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Build, test, and install:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make -j 10&amp;lt;br /&amp;gt;&amp;gt; make all_tests&amp;lt;br /&amp;gt;&amp;gt; make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MCT (Model Coupling Toolkit)==&lt;br /&gt;
&lt;br /&gt;
Open-source library distributed as a set of Fortran-90 modules for constructing a coupled model system from Earth System Model (ESM) components ([http://www-unix.mcs.anl.gov/mct Larson et al., 2004]). Each component model has its own grid and runs on its own set of processors. The MCT library provides protocols for decomposition and allocation of model grids among different processors, efficient transfer of data fields between the different models, and interpolation algorithms for the data fields that are transferred.&lt;br /&gt;
&lt;br /&gt;
The MCT library is used to couple ROMS atmosphere models (like WRF) and wave models (like SWAN and WW3). For example, SWAN sends to ROMS arrays of wave height, wavelength, average wave periods at the surface and near the bottom, wave propagation direction, near-bottom orbital velocity, and wave-energy dissipation rate. ROMS provides SWAN arrays of water depth, sea-surface elevation, and current velocity. Data exchange between SWAN and ROMS occurs at user-defined synchronization intervals. The frequency of data exchange depends on the application. If the exchanged fields fluctuate rapidly, more frequent synchronization is required. However, data exchange increases run time, so experience is required to determine the optimum synchronization interval for each application.&lt;br /&gt;
&lt;br /&gt;
MCT is available via github:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/MCSclimate/MCT&amp;lt;br /&amp;gt;&amp;gt; cd MCT&amp;lt;br /&amp;gt;&amp;gt; ./configure&amp;lt;br /&amp;gt;&amp;gt; make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==NetCDF (Network Common Data Form)==&lt;br /&gt;
&lt;br /&gt;
Open-source, machine-independent libraries for storing self-describing scientific data into portable, scalable, appendable, and sharable computer files. It provides &#039;&#039;&#039;API&#039;&#039;&#039; in several computer languages to create files, to write data into a file, to read data from the file, and access information about the dataset dimensions, variables, and attributes.  &lt;br /&gt;
&lt;br /&gt;
ROMS uses &#039;&#039;&#039;NetCDF&#039;&#039;&#039; for all its input and output data management. Its &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; type files can be processed using the standard library developed and distributed [http://doi.org/10.5065/D6H70CW6 UCAR/Unidata], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) developed at ANL/NCAR ([https://doi.org/10.1177/1094342011428143 Dennis &#039;&#039;et al&#039;&#039;., 2012]; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE Hartnett and Edwards, 2021]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library available in [https://e3sm.org/scorpio-parallel-io-library E3SM]. We have migrated to the Fortran-90 &#039;&#039;&#039;API&#039;&#039;&#039; interface,  which consists of a library and one or two module files. See the [[makefile]] and [[build_roms| build script]] for how to tell ROMS where these are located. You will have to use a copy of the library and module files that were compiled using the same compiler you are using to compile ROMS - this is especially true for the module files.&lt;br /&gt;
&lt;br /&gt;
===Building NetCDF-4/HDF5===&lt;br /&gt;
NetCDF-4 uses HDF5 for it&#039;s underlying data format so you first need to build HDF5. We recommend 1.10.6 because 1.10.7 causes errors in the NetCDF-C test suite. Here we will describe how to build parallel versions for use on an HPC cluster. We will note what changes are necessary if you are building for a system that doesn&#039;t have parallel I/O.&lt;br /&gt;
&lt;br /&gt;
====Building HDF5====&lt;br /&gt;
* First, download &#039;&#039;&#039;HDF5&#039;&#039;&#039; source code as a gzipped tarball or via git clone:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.6/src/hdf5-1.10.6.tar.gz&amp;lt;/div&amp;gt;or&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/HDFGroup/hdf5&amp;lt;br /&amp;gt;&amp;gt; cd hdf5&amp;lt;br /&amp;gt;&amp;gt; git checkout tags/hdf5-1_10_6&amp;lt;br /&amp;gt;&amp;gt; autoconf -i&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Configure &#039;&#039;&#039;HDF5&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; ./configure CC=mpicc CXX=mpicxx FC=mpifort \&amp;lt;br /&amp;gt;      RUNPARALLEL=&amp;quot;srun --nodes=1 --ntasks=6 --cpus-per-task=1 --time=00:13:00 --export=ALL &amp;quot; \&amp;lt;br /&amp;gt;      --prefix=/path/to/parallel/hdf5/1.10.6 --enable-static-exec --enable-shared=no \&amp;lt;br /&amp;gt;      --enable-parallel --disable-silent-rules --enable-fortran&amp;lt;/div&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; &#039;&#039;RUNPARALLEL&#039;&#039; is only needed if your system uses a scheduler to run MPI jobs. The example here is for a SLURM system but you will need to adjust this for your cluster.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; To compile &#039;&#039;&#039;serial&#039;&#039;&#039;, remove &#039;&#039;RUNPARALLEL=...&#039;&#039; and &#039;&#039;--enable-parallel&#039;&#039; and change the CC, CXX, and FC to the corresponding serial compilers (e.g. gcc, g++, and gfortran).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; If you would like &#039;&#039;&#039;shared libraries&#039;&#039;&#039; to be built, also remove &#039;&#039;--enable-shared=no&#039;&#039;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Build, test, and install &#039;&#039;&#039;HDF5&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make -j 5&amp;lt;br /&amp;gt;&amp;gt; make all_tests&amp;lt;br /&amp;gt;&amp;gt; make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Building NetCDF-C====&lt;br /&gt;
The C and Fortran APIs for NetCDF are in separate packages and the C version must be built first.&lt;br /&gt;
&lt;br /&gt;
* Download &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039; source code as a gzipped tarball or via git clone:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-c-4.7.4.tar.gz&amp;lt;/div&amp;gt;or&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/Unidata/netcdf-c&amp;lt;br /&amp;gt;&amp;gt; cd netcdf-c&amp;lt;br /&amp;gt;&amp;gt; git checkout tags/v4.7.4&amp;lt;br /&amp;gt;&amp;gt; autoconf -i&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Configure &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; ./configure CC=mpicc FC=mpifort CFLAGS=-O3 CPPFLAGS=&amp;quot;-I/path/to/parallel/hdf5/1.10.6/include&amp;quot; \&amp;lt;br /&amp;gt;      LDFLAGS=&amp;quot;-L/path/to/parallel/hdf5/1.10.6/lib&amp;quot; \&amp;lt;br /&amp;gt;      --with-mpiexec=/path/to/job/submistion/script \&amp;lt;br /&amp;gt;      --prefix=/path/to/parallel/netcdf/4.7.4 \&amp;lt;br /&amp;gt;      --enable-parallel-tests --disable-shared --disable-silent-rules&amp;lt;/div&amp;gt;{{note}} Note that &#039;&#039;--with-mpiexec&#039;&#039; is only needed for running test on clusters that use scheduling systems like SLURM. Your submission script should take &#039;&#039;&#039;-n&#039;&#039;&#039;, &#039;&#039;&#039;N&#039;&#039;&#039; (number of processes requested), and &#039;&#039;&#039;programName&#039;&#039;&#039; (in that order) as arguments to construct the appropriate command to run using the scheduling system on your cluster. A SLURM example is provided below:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;# 1) &amp;lt;this_script&amp;gt; -n N prog&amp;lt;br /&amp;gt;#    runs N copies of executable &amp;quot;prog&amp;quot; in parallel. The script must hide all&amp;lt;br /&amp;gt;#    of the system specific details, such as going through a queueing system&amp;lt;br /&amp;gt;#    and/or calling a system specific mpirun script with modified arguments.&amp;lt;br /&amp;gt;#&amp;lt;br /&amp;gt;# 2) The output of the application must arrive at the calling shell via&amp;lt;br /&amp;gt;#    stdout and stderr.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;if [ &amp;quot;$1&amp;quot; != &amp;quot;-n&amp;quot; ]&amp;lt;br /&amp;gt;then&amp;lt;br /&amp;gt;        echo &amp;quot;Usage: mpirun -n # prog&amp;quot;&amp;lt;br /&amp;gt;        exit 1&amp;lt;br /&amp;gt;fi&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;num_procs=$2&amp;lt;br /&amp;gt;shift 2&amp;lt;br /&amp;gt;prog=$*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;echo &amp;quot;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;quot;&amp;lt;br /&amp;gt;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;lt;/div&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; To compile &#039;&#039;&#039;serial&#039;&#039;&#039;, remove &#039;&#039;--with-mpiexec&#039;&#039; and &#039;&#039;--enable-parallel-tests&#039;&#039; and change the CC, and FC to the corresponding serial compilers (e.g. gcc and gfortran).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; If you would like shared libraries to be built, also remove &#039;&#039;--disable-shared&#039;&#039;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Build, test, and install &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make -j 5&amp;lt;br /&amp;gt;&amp;gt; make check&amp;lt;br /&amp;gt;&amp;gt; make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Building NetCDF-Fortran====&lt;br /&gt;
Now we can build the Fortran API.&lt;br /&gt;
&lt;br /&gt;
* Download &#039;&#039;&#039;NetCDF-Fortran&#039;&#039;&#039; source code as a gzipped tarball or via git clone:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-4.5.3.tar.gz&amp;lt;/div&amp;gt;or&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;git clone https://github.com/Unidata/netcdf-fortran&amp;lt;br /&amp;gt;&amp;gt; cd netcdf-fortan&amp;lt;br /&amp;gt;&amp;gt; git checkout tags/v4.5.3&amp;lt;br /&amp;gt;&amp;gt; autoconf -i&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* There is a bug/typo in &#039;&#039;&#039;configure&#039;&#039;&#039; that makes &#039;&#039;nf-config&#039;&#039; report the wrong linking information to ROMS. To fix the error, edit the &#039;&#039;&#039;configure&#039;&#039;&#039; file (and &#039;&#039;&#039;configure.ac&#039;&#039;&#039; if you plan to run &#039;&#039;autoconf -i&#039;&#039; again) and change the line:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;NC_FLIBS=&amp;quot;-lnetcdff $NC_FLIBS&amp;quot;&amp;lt;/div&amp;gt;to&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;NC_FLIBS=&amp;quot;-lnetcdff $NC_LIBS&amp;quot;&amp;lt;/div&amp;gt; more details can be found [https://github.com/Unidata/netcdf-fortran/issues/270 here].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Configure &#039;&#039;&#039;NetCDF-Fortran&#039;&#039;&#039;. Note that we set &#039;&#039;prefix&#039;&#039; to the same as &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039; so the C and Fortran libraries live together:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; ./configure CC=mpicc FC=mpifort CFLAGS=-O3 FFLAGS=-O3 \&amp;lt;br /&amp;gt;      CPPFLAGS=&amp;quot;-I/path/to/parallel/hdf5/1.10.6/include -I/path/to/parallel/netcdf/4.7.4/include&amp;quot; \&amp;lt;br /&amp;gt;      LDFLAGS=&amp;quot;-L/path/to/parallel/hdf5/1.10.6/lib -L/path/to/parallel/netcdf/4.7.4/lib&amp;quot; \&amp;lt;br /&amp;gt;      LIBS=&amp;quot;-lnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl&amp;quot; \&amp;lt;br /&amp;gt;      --with-mpiexec=/path/to/job/submistion/script \&amp;lt;br /&amp;gt;      --prefix=/path/to/parallel/netcdf/4.7.4 \&amp;lt;br /&amp;gt;      --enable-parallel-tests --disable-shared --disable-silent-rules&amp;lt;/div&amp;gt;{{note}} Note that &#039;&#039;--with-mpiexec&#039;&#039; should point to the submision script you created while building &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039; and is only needed for running test on clusters that use scheduling systems like SLURM.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; To compile serial remove &#039;&#039;--with-mpiexec&#039;&#039; and &#039;&#039;--enable-parallel-tests&#039;&#039; and change the CC, and FC to the corresponding serial compilers (e.g. gcc and gfortran).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; If you would like shared libraries to be built, also remove &#039;&#039;--disable-shared&#039;&#039;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If you are running on clusters that use scheduling systems like SLURM, you will need to edit 4 testing scripts replacing all occurrences of &#039;&#039;&#039;mpiexec&#039;&#039;&#039; with the full path to the submision script you created for &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; vi examples/F90/run_f90_par_examples.sh&amp;lt;br /&amp;gt;&amp;gt; vi nf03_test4/run_f90_par_test.sh&amp;lt;br /&amp;gt;&amp;gt; vi nf_test4/run_f77_par_test_03.sh&amp;lt;br /&amp;gt;&amp;gt; vi nf_test4/run_f77_par_test.sh&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Build, test, and install &#039;&#039;&#039;NetCDF-C&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make -j 5&amp;lt;br /&amp;gt;&amp;gt; make check&amp;lt;br /&amp;gt;&amp;gt; make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PIO (Parallel I/O)==&lt;br /&gt;
&lt;br /&gt;
Open-source parallel library for reading and writing distributed arrays to several scientific data formats like &#039;&#039;&#039;pNetCDF&#039;&#039;&#039;, &#039;&#039;&#039;NetCDF3&#039;&#039;&#039;, and &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039;. &#039;&#039;&#039;PIO&#039;&#039;&#039; provides the flexibility to regulate the number of I/O tasks through data rearrangement between computational and  I/O processes to improve performance and memory usage. It allows both &#039;&#039;&#039;synchronous&#039;&#039;&#039; and &#039;&#039;&#039;asynchronous&#039;&#039;&#039; I/O. In &#039;&#039;&#039;synchronous mode&#039;&#039;&#039;, a subset of processes performs both I/O and computations (MPI intra-communications). Alternatively, in &#039;&#039;&#039;asynchronous mode&#039;&#039;&#039;, the I/O is carried out by a set of disjointed and dedicated processes (MPI inter-communications).  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library is intended for ROMS Message Passing Interface (MPI) applications running on a large number of processes in an HPC computer with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039; (Lustre, GPFS, and so on). It uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of data across computational or dedicated I/O processes. Both  [https://github.com/NCAR/ParallelIO PIO] and [https://github.com/E3SM-Project/scorpio SCORPIO] will work with ROMS [https://www.myroms.org/projects/src/ticket/884 svn revision 1064] (May 10, 2021) or newer but we recommend &#039;&#039;&#039;PIO&#039;&#039;&#039; for its better performance. We recommend you read the manuals for all the build options, but below we show an example build process for both &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Building PIO (autotools)===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; can use NetCDF (version 4.6.1+) and/or PnetCDF (version 1.9.0+) for I/O. NetCDF may be built with or without netCDF-4 features. NetCDF is required for &#039;&#039;&#039;PIO&#039;&#039;&#039;, PnetCDF is optional. {{note}}However, the ROMS build system assumes that &#039;&#039;&#039;PIO&#039;&#039;&#039; is built with PnetCDF support and will need customization if &#039;&#039;&#039;PIO&#039;&#039;&#039; is built without it.&lt;br /&gt;
&lt;br /&gt;
The NetCDF C library must be built with MPI, which requires that it be linked with an MPI-enabled version of HDF5. Optionally, NetCDF can be built with DAP support, which introduces a dependency on CURL. HDF5, itself, introduces dependencies on LIBZ and (optionally) SZIP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; recently introduced a NetCDF integration option that allows standard NetCDF library calls to be implemented with the &#039;&#039;&#039;PIO&#039;&#039;&#039; library but ROMS Parallel I/O is not currently implemented this way. In order to build &#039;&#039;&#039;PIO&#039;&#039;&#039; with NetCDF integration, you will need NetCDF version 4.7.4 or higher. However, the Fortran API integration has not been implemented in ROMS.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;PIO&#039;&#039;&#039; library can be built with the classic Autotools or Cmake. For &#039;&#039;&#039;PIO&#039;&#039;&#039; we show the Autotools procedure but will show Cmake for &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; in the next section.&lt;br /&gt;
&lt;br /&gt;
*First download the &#039;&#039;&#039;PIO&#039;&#039;&#039; source code as a gzipped tarball or via &#039;&#039;git clone&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; wget https://github.com/NCAR/ParallelIO/releases/download/pio2_5_4/pio-2.5.4.tar.gz&amp;lt;/div&amp;gt;or&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/NCAR/ParallelIO&amp;lt;br /&amp;gt;&amp;gt; cd ParallelIO&amp;lt;br /&amp;gt;&amp;gt; git checkout tags/pio2_5_4&amp;lt;br /&amp;gt;&amp;gt; autoconf -i&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*If you downloaded the gzipped tarball, you should run &#039;&#039;make clean&#039;&#039; because some Fortran .mod files are included and need to be removed:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make clean&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Configure &#039;&#039;&#039;PIO&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; ./configure CC=mpicc CXX=mpicxx FC=mpifort CFLAGS=-O3 FFLAGS=-O3 FCFLAGS=-O3 \&amp;lt;br /&amp;gt;      CPPFLAGS=&amp;quot;-I/path/to/netcdf/include -I/path/to/hdf5/include -I/path/to/pnetcdf/include&amp;quot; \&amp;lt;br /&amp;gt;      LDFLAGS=&amp;quot;-L/path/to/netcdf/lib -L/path/to/hdf5/lib -L/path/to/pnetcdf/lib&amp;quot; \&amp;lt;br /&amp;gt;      LIBS=&amp;quot;-lhdf5_hl -lhdf5 -lm -lcurl -lz&amp;quot; \&amp;lt;br /&amp;gt;      --with-mpiexec=/path/to/cluster/submission/script \&amp;lt;br /&amp;gt;      --prefix=/pio/install/path --enable-fortran --disable-timing \&amp;lt;br /&amp;gt;      --disable-silent-rules --disable-shared&amp;lt;/div&amp;gt;{{note}} Note that &#039;&#039;--with-mpiexec&#039;&#039; is only needed for running test on clusters that use scheduling systems like SLURM. Your submission script should take &#039;&#039;&#039;-n&#039;&#039;&#039;, &#039;&#039;&#039;N&#039;&#039;&#039; (number of processes requested), and &#039;&#039;&#039;programName&#039;&#039;&#039; (in that order) as arguments to construct the appropriate command to run using the scheduling system on your cluster. A SLURM example is provided below:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;# 1) &amp;lt;this_script&amp;gt; -n N prog&amp;lt;br /&amp;gt;#    runs N copies of executable &amp;quot;prog&amp;quot; in parallel. The script must hide all&amp;lt;br /&amp;gt;#    of the system specific details, such as going through a queueing system&amp;lt;br /&amp;gt;#    and/or calling a system specific mpirun script with modified arguments.&amp;lt;br /&amp;gt;#&amp;lt;br /&amp;gt;# 2) The output of the application must arrive at the calling shell via&amp;lt;br /&amp;gt;#    stdout and stderr.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;if [ &amp;quot;$1&amp;quot; != &amp;quot;-n&amp;quot; ]&amp;lt;br /&amp;gt;then&amp;lt;br /&amp;gt;        echo &amp;quot;Usage: mpirun -n # prog&amp;quot;&amp;lt;br /&amp;gt;        exit 1&amp;lt;br /&amp;gt;fi&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;num_procs=$2&amp;lt;br /&amp;gt;shift 2&amp;lt;br /&amp;gt;prog=$*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;echo &amp;quot;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;quot;&amp;lt;br /&amp;gt;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Build, test, and install &#039;&#039;&#039;PIO&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make -j 5&amp;lt;br /&amp;gt;&amp;gt; make check&amp;lt;br /&amp;gt;&amp;gt; make install&amp;lt;/div&amp;gt;{{warning}} &#039;&#039;&#039;Warning:&#039;&#039;&#039; If you are using the Intel compilers, you will probably need to remove &amp;quot;&#039;&#039;&#039;test_darray_async_many&#039;&#039;&#039;&amp;quot; from line 50 of &#039;&#039;&#039;test/cunit/run_tests.sh&#039;&#039;&#039; for &#039;&#039;make check&#039;&#039; to complete without errors. Details [https://github.com/NCAR/ParallelIO/issues/1867 here].&lt;br /&gt;
&lt;br /&gt;
===Building SCORPIO (Cmake)===&lt;br /&gt;
&lt;br /&gt;
{{note}} &#039;&#039;&#039;Note:&#039;&#039;&#039; &#039;&#039;&#039;SORPIO&#039;&#039;&#039; recently released version 1.2.0 and 1.2.1 but ROMS has not been tested with these versions. It is likely that the new version will work fine with ROMS but use these new versions at your own risk.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SCORPIO&#039;&#039;&#039; can use NetCDF (version 4.3.3+), PnetCDF (version 1.6.0+) or ADIOS (version 2.6.0+) for I/O. {{note}} ADIOS is not implemented in ROMS.&lt;br /&gt;
&lt;br /&gt;
Ideally, the NetCDF version should be built with MPI, which requires that it be linked with an MPI-enabled version of HDF5. Optionally, NetCDF can be built with DAP support, which introduces a dependency on CURL. Additionally, HDF5, itself, introduces dependencies on LIBZ and (optionally) SZIP. If your NetCDF is built with DAP support, you will need to edit &#039;&#039;&#039;cmake/TryNetCDF_DAP.c&#039;&#039;&#039;, changing line 8 from &amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#if NC_HAS_DAP==1&amp;lt;/div&amp;gt; to &amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#if NC_HAS_DAP==1 || NC_HAS_DAP2==1 || NC_HAS_DAP4==1&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Download the &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; source code:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; git clone https://github.com/E3SM-Project/scorpio&amp;lt;br /&amp;gt;&amp;gt; cd scorpio&amp;lt;br /&amp;gt;&amp;gt; git checkout tags/scorpio-v1.1.6&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;If your NetCDF is built with DAP support, you will need to edit &#039;&#039;&#039;cmake/TryNetCDF_DAP.c&#039;&#039;&#039;, changing line 8 from &amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#if NC_HAS_DAP==1&amp;lt;/div&amp;gt; to &amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#if NC_HAS_DAP==1 || NC_HAS_DAP2==1 || NC_HAS_DAP4==1&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Configure &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; cd ..&amp;lt;br /&amp;gt;&amp;gt; mkdir build_scorpio&amp;lt;br /&amp;gt;&amp;gt; cd build_scorpio&amp;lt;br /&amp;gt;&amp;gt; CC=mpicc CXX=mpicxx FC=mpifort cmake \&amp;lt;br /&amp;gt;    -DNetCDF_PATH=/path/to/netcdf \&amp;lt;br /&amp;gt;    -DPnetCDF_PATH=/path/to/pnetcdf \&amp;lt;br /&amp;gt;    -DMPIEXEC=/path/submission/scipt \&amp;lt;br /&amp;gt;    -DMPIEXEC_MAX_NUMPROCS=8 -DMPIEXEC_NUMPROC_FLAG=-n \&amp;lt;br /&amp;gt;    -DPIO_FILESYSTEM_HINTS=gpfs -DPIO_ENABLE_TIMING=OFF -DPIO_ENABLE_TESTS=ON \&amp;lt;br /&amp;gt;    -DCMAKE_INSTALL_PREFIX=/scorpio/install/path ../scorpio&amp;lt;/div&amp;gt;{{note}} Note that &#039;&#039;-DMPIEXEC&#039;&#039; is only needed for running test on clusters that use scheduling systems like SLURM. Your submission script should take &#039;&#039;&#039;-n&#039;&#039;&#039;, &#039;&#039;&#039;N&#039;&#039;&#039; (number of processes requested), and &#039;&#039;&#039;programName&#039;&#039;&#039; (in that order) as arguments to construct the appropriate command to run using the scheduling system on your cluster. A SLURM example is provided below:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;# 1) &amp;lt;this_script&amp;gt; -n N prog&amp;lt;br /&amp;gt;#    runs N copies of executable &amp;quot;prog&amp;quot; in parallel. The script must hide all&amp;lt;br /&amp;gt;#    of the system specific details, such as going through a queueing system&amp;lt;br /&amp;gt;#    and/or calling a system specific mpirun script with modified arguments.&amp;lt;br /&amp;gt;#&amp;lt;br /&amp;gt;# 2) The output of the application must arrive at the calling shell via&amp;lt;br /&amp;gt;#    stdout and stderr.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;if [ &amp;quot;$1&amp;quot; != &amp;quot;-n&amp;quot; ]&amp;lt;br /&amp;gt;then&amp;lt;br /&amp;gt;        echo &amp;quot;Usage: mpirun -n # prog&amp;quot;&amp;lt;br /&amp;gt;        exit 1&amp;lt;br /&amp;gt;fi&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;num_procs=$2&amp;lt;br /&amp;gt;shift 2&amp;lt;br /&amp;gt;prog=$*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;echo &amp;quot;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;quot;&amp;lt;br /&amp;gt;srun --mpi=pmi2 --partition=my_partition --nodes=1 --ntasks=${num_procs} --cpus-per-task=1 --time=00:10:00 --exclusive --export=ALL $prog&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Compile, test, and install:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;gt; make -j 6&amp;lt;br /&amp;gt;&amp;gt; make -j 6 tests&amp;lt;br /&amp;gt;&amp;gt; ctests&amp;lt;br /&amp;gt;&amp;gt; make install&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=4DVar_Tutorial_Introduction&amp;diff=6646</id>
		<title>4DVar Tutorial Introduction</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=4DVar_Tutorial_Introduction&amp;diff=6646"/>
		<updated>2024-02-14T16:55:22Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Download Tutorial Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;4-Dimensional Variational (4D-Var) Data Assimilation Tutorial&amp;lt;/div&amp;gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This tutorial shows several examples of ROMS 4D-Var data assimilation algorithms in the California Current System (CCS), 1/3 degree resolution ([[Options#WC13|WC13]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit Template:4DVar_Tut_TOC to modify this Table of Contents--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;margin: 0 20px 0 0;&amp;quot;&amp;gt;{{4DVar Tut TOC}}&amp;lt;/div&amp;gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section begin=setup /&amp;gt;&lt;br /&gt;
==Model Set-up==&lt;br /&gt;
The [[Options#WC13|WC13]] model domain is shown in Fig. 1 and has open boundaries along the northern, western, and southern edges of the model domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:hraw_coarse_transect.png|500px|thumb|center|&amp;lt;center&amp;gt;&#039;&#039;&#039;Fig. 1:&#039;&#039;&#039; Model Bathymetry with 37&amp;amp;deg;N Transect and Target Area&amp;lt;/center&amp;gt;]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the tutorial, you will perform a 4D-Var data assimilation cycle that spans the period 3-6 January, 2004. The 4D-Var control vector &#039;&#039;&amp;amp;delta;&#039;&#039;&#039;&#039;&#039;z&#039;&#039;&#039; is comprised of increments to the initial conditions, &#039;&#039;&amp;amp;delta;&#039;&#039;&#039;&#039;&#039;x&#039;&#039;&#039;(&#039;&#039;t&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;), surface forcing, &amp;amp;delta;&#039;&#039;&#039;f&#039;&#039;&#039;(&#039;&#039;t&#039;&#039;), and open boundary conditions, &amp;amp;delta;&#039;&#039;&#039;b&#039;&#039;&#039;(&#039;&#039;t&#039;&#039;). The &#039;&#039;prior&#039;&#039; initial conditions, &#039;&#039;&#039;x&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;&#039;&#039;&#039;(&#039;&#039;t&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;), are taken from the sequence of 4D-Var experiments described by [[Bibliography#MooreAM_2011b|Moore &#039;&#039;et al.&#039;&#039; (2011b)]] in which data were assimilated every 7 days during the period July 2002- December 2004. The &#039;&#039;prior&#039;&#039; surface forcing, &#039;&#039;&#039;f&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;&#039;&#039;&#039;(&#039;&#039;t&#039;&#039;), takes the form of surface wind stress, heat flux, and a freshwater flux computed using the ROMS bulk flux formulation, and using near surface air data from COAMPS ([[Bibliography#DoyleJD_2009|Doyle &#039;&#039;et al.&#039;&#039;, 2009]]). Clamped open boundary conditions are imposed on (&#039;&#039;u&#039;&#039;,&#039;&#039;v&#039;&#039;) and tracers, and the &#039;&#039;prior&#039;&#039; boundary conditions, &#039;&#039;&#039;b&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;&#039;&#039;&#039;(&#039;&#039;t&#039;&#039;), are taken from the global ECCO product ([[Bibliography#WunschC_2007|Wunsch and Heimbach, 2007]]). The free-surface height and vertically integrated velocity components are subject to the usual Chapman and Flather radiation conditions at the open boundaries. The &#039;&#039;prior&#039;&#039; surface forcing and open boundary conditions are provided daily and linearly interpolated in time. Similarly, the increments &#039;&#039;&amp;amp;delta;&#039;&#039;&#039;&#039;&#039;f&#039;&#039;&#039;(&#039;&#039;t&#039;&#039;) and &#039;&#039;&amp;amp;delta;&#039;&#039;&#039;&#039;&#039;b&#039;&#039;&#039;(&#039;&#039;t&#039;&#039;) are also computed daily and linearly interpolated in time.&lt;br /&gt;
&lt;br /&gt;
The observations assimilated into the model are satellite SST, satellite SSH in the form of a gridded product from Aviso, and hydrographic observations of temperature and salinity collected from Argo floats and during the GLOBEC/LTOP and CalCOFI cruises off the coast of Oregon and southern California, respectively. The observation locations are illustrated in Fig. 2.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|+style=&amp;quot;caption-side:bottom;&amp;quot;|&#039;&#039;&#039;Figure 2:&#039;&#039;&#039; WC13 Observations&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:aviso_ssh_2019.png|thumb|400px|&amp;lt;center&amp;gt;&#039;&#039;&#039;a)&#039;&#039;&#039; Aviso SSH&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|[[Image:blended_sst_2019.png|thumb|400px|&amp;lt;center&amp;gt;&#039;&#039;&#039;b)&#039;&#039;&#039; Blended SST&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:in_situ_T_2019.png|thumb|400px|&amp;lt;center&amp;gt;&#039;&#039;&#039;c)&#039;&#039;&#039; In Situ Temperature&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|[[Image:in_situ_S_2019.png|thumb|400px|&amp;lt;center&amp;gt;&#039;&#039;&#039;d)&#039;&#039;&#039; In Situ Salinity&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;section end=setup /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download Lectures and Exercises==&lt;br /&gt;
&lt;br /&gt;
The workshop Agenda can be found [https://www.myroms.org/Workshops/4DVAR2019/Agenda.pdf here]. Links to the [https://www.myroms.org/index.php?page=4DVAR_2019_info 2019 ROMS 4D-Var workshop] lectures are provided below. These lectures are meant to supplement this 4D-Var tutorial.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Lecture 1:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_1_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;4D-Var: Some Basics&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 2:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_2_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;The Mechanics of 4D-Var&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 3:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_3_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Dual 4D-Var&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 4:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_4_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Observing System Simulation Experiments (OSSEs)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 5:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_5_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Observation Impact &amp;amp;amp; Observation Sensitivity&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 6:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_6_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;The MARACOOS analysis-forecast system&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 7:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_7_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Array Modes&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 8:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_8_2019.pdf PDF]--&amp;gt;PDF&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;The West Coast Ocean Forecasting System (WCOFS)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lecture 9:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Lectures/Lecture_9_2019.pdf PDF]--&amp;gt;PDF&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;The CeNCOOS and PacIOOS analysis-forecast systems&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below are the tutorials pertinent to the [https://www.myroms.org/index.php?page=4DVAR_2019_info 2019 ROMS 4D-Var workshop]:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 01:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_01_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Explanation of cpp options, ocean.in, s4dvar.in (I4DVAR)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 02:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_02_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Multiple outer loops&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 03:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_03_2019.pdf PDF]--&amp;gt;&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Discussion of exercises 1 and 2&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 04:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_04_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Calculation of prior error standard deviations&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 05:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_05_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Explanation of cpp options, ocean.in, s4dvar.in (RBL4D-Var)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 06:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_06_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Semi-variograms&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 07:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_07_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ERDDAP data server and management tools&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 08:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_08_2019.pdf PDF]--&amp;gt;&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Discussion of exercises 3 &amp;amp; 4&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 09:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_09_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Computing normalization coefficients for covariance models&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 10:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_10_2019.pdf PDF_Arango] | [http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_10a_2019.pdf PDF_Wilkin]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Building your observation files&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 11:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_11_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Observation Impact &amp;amp; Observation Sensitivity&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 12:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_12_2019.pdf PDF]--&amp;gt;&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Discussion of exercise 5&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 13:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_13_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Using ERDDAP to view observation impact information&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 14:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_14_2019.pdf PDF]--&amp;gt;&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Discussion of exercise 6 &amp;amp; 7&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Tutorial 15:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;&amp;lt;!--[http://www.myroms.org/Workshops/4DVAR2019/Tutorials/Tutorial_15_2019.pdf PDF]--&amp;gt;&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Putting it all together&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below are the exercises pertinent to the [https://www.myroms.org/index.php?page=4DVAR_2019_info 2019 ROMS 4D-Var workshop]:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Exercise 1:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_1_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Incremental, Strong Constraint 4D-Var&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 2:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_2_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;I4D-Var with Multiple Outer-loops&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 3:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_3_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Dual Formulation 4D-Var - RBL4D-Var&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 4:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_4_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Weak Constraint Dual Formulation 4D-Var&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 5:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_5_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Analysis Cycle Observation Impacts&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 6:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_6_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Analysis Cycle Observation Sensitivity&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 7:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_7_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Reduced-Rank Array Modes&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 8:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_8_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Forecast Cycle Observation Impacts&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Exercise 9:&#039;&#039;&#039; &amp;amp;nbsp; &amp;lt;span style=&amp;quot;font-size: 75%&amp;quot;&amp;gt;[http://www.myroms.org/Workshops/4DVAR2019/Exercises/EXERCISE_9_2019.pdf PDF]&amp;lt;/span&amp;gt; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Forecast Cycle Observation Sensitivities&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below are the homeworks pertinent to the [https://www.myroms.org/index.php?page=4DVAR_2019_info 2019 ROMS 4D-Var workshop]:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Homework 1:&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Building the standard deviation file for user model configuration&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Homework 2:&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Building the file of normalization coefficients for the prior error covariance matrix for user model configuration&amp;lt;/span&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Homework 3:&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Build observation file for user model configuration&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download Tutorial Files==&lt;br /&gt;
All data files and scripts necessary to run the 4D-Var tests discussed in this tutorial are available from the ROMS [https://github.com/myroms GitHub] repository. To download, execute the following command:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; git clone https://github.com/myroms/roms_test.git&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial Directory Structure==&lt;br /&gt;
When the checkout is complete, you will have the following directory structure under your &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;my_test&amp;lt;/span&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;/WC13                                 Main California Current System 4D-Var applications&lt;br /&gt;
       /ARRAY_MODES                     Stabilized representer matrix array modes and clipping&lt;br /&gt;
       /Data                            Input data directory&lt;br /&gt;
       /Functionals                     Analytical expressions header files&lt;br /&gt;
       /I4DVAR                          Primal form of incremental, strong constraint 4D-Var, I4D-Var&lt;br /&gt;
       /Normalization                   4D-Var error covariance normalization coefficients&lt;br /&gt;
       /plotting                        4D-Var plotting scripts (Matlab and ROMS plotting package)&lt;br /&gt;
       /RBL4DVAR                        Dual form of 4D-Var, Restricted B-preconditioned Lanczos Analysis System, RBL4D-Var&lt;br /&gt;
       /RBL4DVAR_analysis_impact        RBL4D-Var analysis observation impact&lt;br /&gt;
       /RBL4DVAR_analysis_sensitivity   RBL4D-Var analysis observation sensitivity (adjoint of RBL4D-Var)&lt;br /&gt;
       /RBL4DVAR_forecast_impact        RBL4D-Var forecast observation impact&lt;br /&gt;
       /RBL4DVAR_forecast_sensitivity   RBL4D-Var forecast observation sensitivity (adjoint of RBL4D-Var)&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
Mostly all the directories have a &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Readme&amp;lt;/span&amp;gt; file with detailed instructions for configuring, compiling, running, and plotting the results.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
The technical description of the algorithms and application used in this tutorial are described in Moore &#039;&#039;et al.&#039;&#039; ([[Bibliography#MooreAM_2011a|2011a]], [[Bibliography#MooreAM_2011b|b]], [[Bibliography#MooreAM_2011c|c]]).&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6604</id>
		<title>Source Code</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6604"/>
		<updated>2023-12-08T17:17:26Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This official community version of &#039;&#039;&#039;ROMS&#039;&#039;&#039; is developed and maintained at Rutgers, The State University of New Jersey, New Brunswick, New Jersey, USA. Currently, &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is distributed using both [https://git-scm.com Git] and [https://subversion.apache.org Subversion](&#039;&#039;&#039;SVN&#039;&#039;&#039;). However, starting &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;January 1, 2025&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS&#039;&#039;&#039; framework is intended for users interested in ocean modeling. It requires an extensive background in ocean dynamics, numerical modeling, and computers to configure, run, and analyze the results to ensure you get the correct solution for your application. Therefore, we highly recommend users register at [https://www.myroms.org https://www.myroms.org] and set up a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;username&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; to access the &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum, email notifications for bugs/updates, technical support from the community, trac code maintenance history, tutorials, workshops, and publications. The User&#039;s &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum has over 24,000 posts with helpful information. Technical support is limited to registered users. We do not provide user technical support, usage, or answers in &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS GitHub&amp;lt;/span&amp;gt; repository also has its own wiki at [https://github.com/myroms/roms/wiki https://github.com/myroms/roms/wiki] with useful information and instructions. This &#039;&#039;&#039;GitHub&#039;&#039;&#039; version becomes the official &#039;&#039;&#039;Git&#039;&#039;&#039; repository for downloading, updating, improving, and correcting defects/bugs in the &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code. Also, it is the version used in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/span&amp;gt; interface hosted at [https://github.com/JCSDA-internal https://github.com/JCSDA-internal], which is currently private.&lt;br /&gt;
&lt;br /&gt;
{{note}}&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;Note:&amp;lt;/span&amp;gt; &#039;&#039;&#039;GitHub&#039;&#039;&#039; nowadays requires two-factor authentication!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;The updating of ROMS svn repositories will be discontinued on&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; January 1, 2025&amp;lt;/span&amp;gt;==&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6603</id>
		<title>Source Code</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6603"/>
		<updated>2023-12-08T17:16:43Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This official community version of &#039;&#039;&#039;ROMS&#039;&#039;&#039; is developed and maintained at Rutgers, The State University of New Jersey, New Brunswick, New Jersey, USA. Currently, &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is distributed using both [https://git-scm.com Git] and [https://subversion.apache.org Subversion](SVN). However, starting &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;January 1, 2025&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS&#039;&#039;&#039; framework is intended for users interested in ocean modeling. It requires an extensive background in ocean dynamics, numerical modeling, and computers to configure, run, and analyze the results to ensure you get the correct solution for your application. Therefore, we highly recommend users register at [https://www.myroms.org https://www.myroms.org] and set up a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;username&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; to access the &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum, email notifications for bugs/updates, technical support from the community, trac code maintenance history, tutorials, workshops, and publications. The User&#039;s &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum has over 24,000 posts with helpful information. Technical support is limited to registered users. We do not provide user technical support, usage, or answers in &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS GitHub&amp;lt;/span&amp;gt; repository also has its own wiki at [https://github.com/myroms/roms/wiki https://github.com/myroms/roms/wiki] with useful information and instructions. This &#039;&#039;&#039;GitHub&#039;&#039;&#039; version becomes the official &#039;&#039;&#039;Git&#039;&#039;&#039; repository for downloading, updating, improving, and correcting defects/bugs in the &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code. Also, it is the version used in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/span&amp;gt; interface hosted at [https://github.com/JCSDA-internal https://github.com/JCSDA-internal], which is currently private.&lt;br /&gt;
&lt;br /&gt;
{{note}}&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;Note:&amp;lt;/span&amp;gt; &#039;&#039;&#039;GitHub&#039;&#039;&#039; nowadays requires two-factor authentication!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;The updating of ROMS svn repositories will be discontinued on&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; January 1, 2025&amp;lt;/span&amp;gt;==&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6602</id>
		<title>Source Code</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6602"/>
		<updated>2023-12-08T17:14:28Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This official community version of &#039;&#039;&#039;ROMS&#039;&#039;&#039; is developed and maintained at Rutgers, The State University of New Jersey, New Brunswick, New Jersey, USA. Currently, &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is distributed using both [https://git-scm.com Git] and [https://subversion.apache.org Subversion](SVN). However, starting &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;January 1, 2025&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS&#039;&#039;&#039; framework is intended for users interested in ocean modeling. It requires an extensive background in ocean dynamics, numerical modeling, and computers to configure, run, and analyze the results to ensure you get the correct solution for your application. Therefore, we highly recommend users register at [https://www.myroms.org https://www.myroms.org] and set up a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;username&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; to access the &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum, email notifications for bugs/updates, technical support from the community, trac code maintenance history, tutorials, workshops, and publications. The User&#039;s &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum has over 24,000 posts with helpful information. Technical support is limited to registered users. We do not provide user technical support, usage, or answers in &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS GitHub&amp;lt;/span&amp;gt; repository also has its own wiki at [https://github.com/myroms/roms/wiki https://github.com/myroms/roms/wiki] with useful information and instructions. This &#039;&#039;&#039;GitHub&#039;&#039;&#039; version becomes the official &#039;&#039;&#039;Git&#039;&#039;&#039; repository for downloading, updating, improving, and correcting defects/bugs in the ROMS source code. Also, it is the version used in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/span&amp;gt; interface hosted at [https://github.com/JCSDA-internal https://github.com/JCSDA-internal], which is currently private.&lt;br /&gt;
&lt;br /&gt;
{{note}}&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;Note:&amp;lt;/span&amp;gt; &#039;&#039;&#039;GitHub&#039;&#039;&#039; nowadays requires two-factor authentication!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;The updating of ROMS svn repositories will be discontinued on&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; January 1, 2025&amp;lt;/span&amp;gt;==&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Subversion&amp;diff=6601</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Subversion&amp;diff=6601"/>
		<updated>2023-12-08T17:09:42Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Subversion&amp;lt;/div&amp;gt;&lt;br /&gt;
ROMS source code is distributed using [http://subversion.tigris.org Subversion](SVN). There are SVN clients available for nearly every operating system and a list of popular clients can be found [http://subversion.tigris.org/links.html#clients here]. If you wish to use Subversion to maintain your own copy of ROMS you will also need an [http://subversion.tigris.org/project_packages.html svn server]. This page will help you get started with downloading ROMS with Subversion. There is also a way to download ROMS using git, described [[ROMS_git | elsewhere]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;The updating of ROMS svn repositories will be discontinued on&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; January 1, 2025&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
==SVN Overview==&lt;br /&gt;
Subversion is a tool for managing software development that keeps track of who modified what and allows the return to a previous version if changes don&#039;t work as expected. All the ROMS/TOMS files are stored in a SVN repository on &#039;&#039;&#039;www.myroms.org&#039;&#039;&#039; with access controlled by requiring authentication with the same ROMS Username/Password combination assigned to registered users of the ROMS Forum.&lt;br /&gt;
&lt;br /&gt;
This SVN repository is the official version of the code which only the developers are allowed to change. Users should download the ROMS code to their local machines using an &#039;&#039;&#039;svn client&#039;&#039;&#039;.  Don&#039;t attempt to use a regular web browser to browse or download files from the SVN repository - there are much better tools for interacting with the code repository. See the notes below under the heading &#039;&#039;&#039;View the Repository&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
We strongly recommend users always check out the current &#039;&#039;trunk&#039;&#039; version since this has the most recent updates and bug fixes. The &#039;&#039;tags&#039;&#039; version is kept largely as an historical record of stable releases at the conclusion of major code upgrades. &lt;br /&gt;
&lt;br /&gt;
Below is a general description of how subversion works. Please look at the [http://svnbook.red-bean.com/ svn book] for more detailed information. Brief instructions for using two GUI clients (one for PC and one for Linux) we&#039;ve tried are included.&lt;br /&gt;
&lt;br /&gt;
==Downloading ROMS==&lt;br /&gt;
{{warning}}&#039;&#039;&#039;WARNING:&#039;&#039;&#039; It is strongly suggested that you checkout the ROMS source code using the same operating system you wish to compile and run ROMS on. If you download the code on a Windows machine and wish to run it on a non-Windows machine you will need convert the line endings with a utility like &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dos2unix&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;recode&amp;lt;/span&amp;gt;. Even with these utilities you may still have problems compiling ROMS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order download source code from a Subversion repository, &#039;&#039;&#039;svn client&#039;&#039;&#039; software must be installed on your local machine. If you are compiling subversion on your own be sure to build it with &#039;&#039;&#039;SSL support&#039;&#039;&#039; or you will not be able to download the ROMS source code. Most Linux distributions come with subversion (the command name is &#039;&#039;&#039;svn&#039;&#039;&#039;), so shell commands may be used without installing additional software. If your username on your local computer is not the same as your ROMS username you will need to pass the &#039;&#039;&#039;--username &amp;lt;username&amp;gt;&#039;&#039;&#039; option to &#039;&#039;&#039;svn&#039;&#039;&#039;; an example is given below. The general form of subversion commands is:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn&amp;lt;/span&amp;gt; action from to {optional_qualifiers} &lt;br /&gt;
&lt;br /&gt;
To check-out the files from the ROMS repository &#039;&#039;&#039;trunk&#039;&#039;&#039; (latest version), enter (notice https instead of http):&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn checkout &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/trunk&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;&#039;MyDir&#039;&#039;&#039; is the destination directory on your local computer. It will be created if not found. If your &#039;&#039;&#039;username&#039;&#039;&#039; on your local computer is not the same as your ROMS username you will need to pass the &#039;&#039;&#039;--username&#039;&#039;&#039; option to &#039;&#039;&#039;svn&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn checkout --username joe_roms &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/trunk&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Files for test cases and other repositories===&lt;br /&gt;
There is an additional repository that provides idealized [[Test Cases]] and realistic applications to introduce you to ROMS many capabilities. You may use these examples as a guideline in setting up your own application. Currently, this repository requires &#039;&#039;&#039;~388MB&#039;&#039;&#039; of disk space. This is because the realistic applications require several input NetCDF files. To checkout this repository, enter:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn checkout &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/test&amp;lt;/nowiki&amp;gt; MyTest&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, to check-out the files from the ROMS repository &#039;&#039;&#039;matlab&#039;&#039;&#039; (official scripts), enter:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn checkout &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/matlab&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To check-out the files from the ROMS repository &#039;&#039;&#039;plot&#039;&#039;&#039; (NCAR&#039;s library-based plotting package), enter:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn checkout &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/plot&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
To check-out the files from the ROMS repository &#039;&#039;&#039;branches&#039;&#039;&#039;, &#039;&#039;&#039;plot&#039;&#039;&#039;, &#039;&#039;&#039;matlab&#039;&#039;&#039;, &#039;&#039;&#039;tags&#039;&#039;&#039;, &#039;&#039;&#039;test&#039;&#039;&#039;, and &#039;&#039;&#039;trunk&#039;&#039;&#039;, (this is not recommended because it takes a long time to complete) enter:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn checkout &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src&amp;lt;/nowiki&amp;gt; MyDir&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You only check out once, after that, a hidden directory called &#039;&#039;&#039;.svn&#039;&#039;&#039; exists to keep track of the source, destination and a bunch of other information. Your username and password will also be saved. For more detail on command line use and syntax, see the [http://svnbook.red-bean.com/ svn book].&lt;br /&gt;
&lt;br /&gt;
Several GUI front-ends to subversion exist, allowing the user to have visual prompts to help them manage their files.&lt;br /&gt;
&lt;br /&gt;
===Updates===&lt;br /&gt;
&lt;br /&gt;
Now and again, you might feel the urge to get up to speed with the latest changes that have been made to the ROMS repository. When that happens, simply go to the directory that was &amp;quot;MyDir&amp;quot; above and type:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn update&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion will remember where you checked out from before and see if a newer revision exists. If so, it will download and apply all the relevant changes.&lt;br /&gt;
&lt;br /&gt;
===Code changes===&lt;br /&gt;
&lt;br /&gt;
As you use ROMS, you may find yourself adding new files and new chunks of code to existing files. Unless you are a developer with write access to the repository at www.myroms.org, you have no easy way to save your changes within the svn framework, since any one directory can only point to one repository. To keep getting updates from the trunk, you must keep using the svn server at myroms.org. At the very least, saving a tarball before fetching major updates is a prudent step. A more organized approach to revision control for your own files can be achieved by using [http://git-scm.com/ git].&lt;br /&gt;
&lt;br /&gt;
===Conflicts===&lt;br /&gt;
&lt;br /&gt;
Sometimes when you make changes to your copy of the ROMS code, those changes will conflict with changes made to the repository (the code that resides at &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/trunk&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;). This means that the changes from the server overlapped with your own, and now you have to manually choose between them.&lt;br /&gt;
&lt;br /&gt;
Whenever a conflict occurs, three things typically occur to assist you in resolving that conflict:&lt;br /&gt;
:*Subversion halts during the update, offering you several choices, and remembers that the file is in a state of conflict if you don&#039;t clear it right then.&lt;br /&gt;
:*If Subversion considers the file to be mergeable, it places conflict markers (special strings of text which delimit the “sides” of the conflict, usually &amp;quot;&amp;lt;&amp;quot; and &amp;quot;&amp;gt;&amp;quot; characters) into the file to visibly demonstrate the overlapping areas.&lt;br /&gt;
:*For every conflicted file, Subversion places three extra unversioned (not under Subversion control) files in your working copy:&lt;br /&gt;
::*&#039;&#039;&#039;filename.mine:&#039;&#039;&#039; This is your file as it existed in your working copy (local copy) before you updated your working copy. This file has only your latest changes in it. (If Subversion considers the file to be unmergeable, then the .mine file isn&#039;t created, since it would be identical to the working file.)&lt;br /&gt;
::*&#039;&#039;&#039;filename.rOLDREV:&#039;&#039;&#039; This is the file that was the &#039;&#039;&#039;BASE&#039;&#039;&#039; revision before you updated your working copy. That is, the file that you checked out before you made your latest edits.&lt;br /&gt;
::*&#039;&#039;&#039;filename.rNEWREV:&#039;&#039;&#039; This is the file that your Subversion client just received from the server when you updated your working copy. This file corresponds to the HEAD (latest) revision of the repository.&lt;br /&gt;
&lt;br /&gt;
For example, let&#039;s say you checked out revision 280 and made some changes to &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;User/Functionals/ana_hmixcoef.h&amp;lt;/span&amp;gt;. Now you want to update your ROMS source code to take advantage of a new algorithm but when you run &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn update&amp;lt;/span&amp;gt; your &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ana_hmixcoef.h&amp;lt;/span&amp;gt; is now in conflict with the new version in the repository.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn update&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;U Version&amp;lt;br&amp;gt;U ROMS/Modules/mod_mixing.F&amp;lt;br&amp;gt;U ROMS/Functionals/ana_hmixcoef.h&amp;lt;br&amp;gt;C User/Functionals/ana_hmixcoef.h&amp;lt;br&amp;gt;Updated to revision 291.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above is with an older version of svn. The latest, greatest does this:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;Conflict discovered in &#039;ROMS/Utility/inp_par.F&#039;.&amp;lt;br&amp;gt;Select: (p) postpone, (df) diff-full, (e) edit,&amp;lt;br&amp;gt;        (mc) mine-conflict, (tc) theirs-conflict,&amp;lt;br&amp;gt;        (s) show all options:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Selecting (p) will behave as the old version.&lt;br /&gt;
&lt;br /&gt;
If you get a conflict, you need to do one of three things:&lt;br /&gt;
:*Merge the conflicted text “by hand” by examining and editing the conflict markers within the file.&lt;br /&gt;
:*Copy one of the temporary files on top of your working file.&lt;br /&gt;
:*Run &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn revert &amp;lt;filename&amp;gt;&amp;lt;/span&amp;gt; to throw away all of your local changes.&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve resolved the conflict, you need to let Subversion know by running &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn resolved&amp;lt;/span&amp;gt;. This removes the three temporary files and Subversion no longer considers the file to be in a state of conflict. More on this below.&lt;br /&gt;
&lt;br /&gt;
====Merging Conflicts by Hand====&lt;br /&gt;
&lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; We recommend that you make a backup of the &#039;&#039;&#039;&amp;lt;filename&amp;gt;.mine&#039;&#039;&#039; file before you begin to be certain you don&#039;t accidentally lose your modifications.&lt;br /&gt;
&lt;br /&gt;
To merge your changes with those from the latest revision in the repository, open &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;User/Functionals/ana_hmixcoef.h&amp;lt;/span&amp;gt; in your favorite editor and look for a string of &amp;quot;&amp;lt;&amp;quot; characters. You should see something like this:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;amp;lt;&amp;amp;lt;&amp;amp;lt;&amp;amp;lt;&amp;amp;lt; .mine&amp;lt;br&amp;gt;#ifndef DISTRIBUTE&amp;lt;br&amp;gt;      IF (Lanafile.and.(tile.eq.0)) THEN&amp;lt;br&amp;gt;#else&amp;lt;br&amp;gt;      IF (Lanafile) THEN&amp;lt;br&amp;gt;#endif&amp;lt;br&amp;gt;=======&amp;lt;br&amp;gt;#ifdef DISTRIBUTE&amp;lt;br&amp;gt;      IF (Lanafile) THEN&amp;lt;br&amp;gt;#else&amp;lt;br&amp;gt;      IF (Lanafile.and.(tile.eq.0)) THEN&amp;lt;br&amp;gt;#endif&amp;lt;br&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; .r291&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After comparing the two code blocks (separated by the &amp;quot;=&amp;quot; symbol), you decide that you prefer the logic from the repository so you remove the conflict markers and your code so the section now looks like this:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;#ifdef DISTRIBUTE&amp;lt;br&amp;gt;      IF (Lanafile) THEN&amp;lt;br&amp;gt;#else&amp;lt;br&amp;gt;      IF (Lanafile.and.(tile.eq.0)) THEN&amp;lt;br&amp;gt;#endif&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can save the file and let Subversion know that you have resolved the conflict:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn resolved User/Functionals/ana_hmixcoef.h&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;Resolved conflicted state of &#039;User/Functionals/ana_hmixcoef.h&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Copying a File Onto Your Working File====&lt;br /&gt;
&lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; We recommend that you make a backup of the &#039;&#039;&#039;&amp;lt;filename&amp;gt;.mine&#039;&#039;&#039; file before you begin to be certain you don&#039;t accidentally lose your modifications.&lt;br /&gt;
&lt;br /&gt;
If you get a conflict and decide that you want to throw out your changes, you can merely copy one of the temporary files created by Subversion over the file in your working copy. Let&#039;s say you want to use the new revision from the repository:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd User/Functionals&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ls ana_hmixcoef.h*&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;ana_hmixcoef.h  ana_hmixcoef.h.mine  ana_hmixcoef.h.r280  ana_hmixcoef.h.r291&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cp ana_hmixcoef.h.r291 ana_hmixcoef.h&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn resolved ana_hmixcoef.h&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;Resolved conflicted state of &#039;ana_hmixcoef.h&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Punting: Using &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn revert&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
{{note}}&#039;&#039;&#039;Note:&#039;&#039;&#039; We recommend that you make a backup of the &#039;&#039;&#039;&amp;lt;filename&amp;gt;.mine&#039;&#039;&#039; file before you begin to be certain you don&#039;t accidentally lose your modifications.&lt;br /&gt;
&lt;br /&gt;
If you get a conflict, and upon examination decide that you want to throw out your changes and start your edits again, just revert your changes:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd User/Functionals&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn revert ana_hmixcoef.h&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;Reverted &#039;ana_hmixcoef.h&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that when you revert a conflicted file, you don&#039;t have to run &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;svn resolved&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Using GUI SVN Clients==&lt;br /&gt;
{{warning}}&#039;&#039;&#039;WARNING:&#039;&#039;&#039; It is strongly suggested that you checkout the ROMS source code using the same operating system you wish to compile and run ROMS on. If you download the code on a Windows machine and wish to run it on a non-Windows machine you will need convert the line endings with a utility like &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dos2unix&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;recode&amp;lt;/span&amp;gt;. Even with these utilities you may still have problems compiling ROMS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Most of the GUI &#039;&#039;&#039;svn clients&#039;&#039;&#039; are very similar to each other. In this example we will use eSVN, although several users have reported better luck with the free &amp;quot;Foundation Version&amp;quot; of [http://www.syntevo.com/smartsvn/index.jsp/ SmartSVN].&lt;br /&gt;
&lt;br /&gt;
===View the Repository===&lt;br /&gt;
The easiest way to view a repository is to simply look at it with [http://trac.edgewall.org/ Trac] in a web browser. Enter the URL:&lt;br /&gt;
&lt;br /&gt;
https://www.myroms.org/projects/src/browser&lt;br /&gt;
&lt;br /&gt;
You will be prompted for your ROMS username and password. This is also a good way to see individual files in the repository without actually downloading them.&lt;br /&gt;
&lt;br /&gt;
To view the repository with eSVN, Click on the file menu and choose &amp;quot;Browse Repository&amp;quot; and enter repository URL:&lt;br /&gt;
&lt;br /&gt;
[[Image:esvn_browser.jpg]]&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Browse&amp;quot; and you should be able to look at the &#039;&#039;&#039;branches&#039;&#039;&#039;, &#039;&#039;&#039;tags&#039;&#039;&#039;, and &#039;&#039;&#039;trunk&#039;&#039;&#039;. You can navigate the repository with a web browser as described above, but cannot do any of the version control stuff that follows.&lt;br /&gt;
&lt;br /&gt;
===Checkout a Copy of the Trunk===&lt;br /&gt;
&lt;br /&gt;
This process brings a copy of the main code from the repository to your computer and places it under svn control. &amp;quot;Local Path&amp;quot; tells eSVN where you would like your copy of the source code to be located.&lt;br /&gt;
&lt;br /&gt;
[[Image:esvn_checkout.jpg]]&lt;br /&gt;
&lt;br /&gt;
You should see a bunch of text stream by like:&lt;br /&gt;
&lt;br /&gt;
    svn checkout &amp;lt;nowiki&amp;gt;https://www.myroms.org/svn/src/trunk&amp;lt;/nowiki&amp;gt; /home/ocean/src --username ocean &lt;br /&gt;
    --password ****** --non-interactive &lt;br /&gt;
    A /home/ocean/src/ROMS&lt;br /&gt;
    A /home/ocean/src/ROMS/License_ROMS.txt&lt;br /&gt;
    A /home/ocean/src/ROMS/Tangent&lt;br /&gt;
    A /home/ocean/src/ROMS/Tangent/tl_rho_eos.F&lt;br /&gt;
    A /home/ocean/src/ROMS/Tangent/tl_uv3dmix.F&lt;br /&gt;
    A /home/ocean/src/ROMS/Tangent/tl_def_his.F&lt;br /&gt;
    ...&lt;br /&gt;
    A /home/ocean/src/Compilers/UNICOS-mk-f90.mk&lt;br /&gt;
    A /home/ocean/src/Compilers/CYGWIN-g95.mk&lt;br /&gt;
    A /home/ocean/src/Compilers/OSF1-f90.mk&lt;br /&gt;
    A /home/ocean/src/Compilers/Darwin-ifort.mk&lt;br /&gt;
    A /home/ocean/src/Compilers/AIX-xlf.mk&lt;br /&gt;
    A /home/ocean/src/Compilers/SunOS-f95.mk&lt;br /&gt;
    A /home/ocean/src/makefile&lt;br /&gt;
    Checked out revision 11.&lt;br /&gt;
    successfully (0)&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6600</id>
		<title>Source Code</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6600"/>
		<updated>2023-12-08T17:01:59Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This official community version of &#039;&#039;&#039;ROMS&#039;&#039;&#039; is developed and maintained at Rutgers, The State University of New Jersey, New Brunswick, New Jersey, USA. Currently, &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is distributed using both [https://git-scm.com Git] and [https://subversion.apache.org Subversion](SVN). However, starting &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;January 1, 2025&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS&#039;&#039;&#039; framework is intended for users interested in ocean modeling. It requires an extensive background in ocean dynamics, numerical modeling, and computers to configure, run, and analyze the results to ensure you get the correct solution for your application. Therefore, we highly recommend users register at [https://www.myroms.org https://www.myroms.org] and set up a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;username&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; to access the &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum, email notifications for bugs/updates, technical support from the community, trac code maintenance history, tutorials, workshops, and publications. The User&#039;s &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum has over 24,000 posts with helpful information. Technical support is limited to registered users. We do not provide user technical support, usage, or answers in &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS GitHub&amp;lt;/span&amp;gt; repository also has its own wiki at [https://github.com/myroms/roms/wiki https://github.com/myroms/roms/wiki] with useful information and instructions. This &#039;&#039;&#039;GitHub&#039;&#039;&#039; version becomes the official &#039;&#039;&#039;Git&#039;&#039;&#039; repository for downloading, updating, improving, and correcting defects/bugs in the ROMS source code. Also, it is the version used in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/span&amp;gt; interface hosted at [https://github.com/JCSDA-internal https://github.com/JCSDA-internal], which is currently private.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;The updating of ROMS svn repositories will be discontinued on&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; January 1, 2025&amp;lt;/span&amp;gt;==&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6599</id>
		<title>Source Code</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6599"/>
		<updated>2023-12-08T16:57:35Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This official community version of &#039;&#039;&#039;ROMS&#039;&#039;&#039; is developed and maintained at Rutgers, The State University of New Jersey, New Brunswick, New Jersey, USA. Currently, &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is distributed using both [https://git-scm.com Git] and [https://subversion.apache.org Subversion](SVN). However, starting &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;January 1, 2025&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS&#039;&#039;&#039; framework is intended for users interested in ocean modeling. It requires an extensive background in ocean dynamics, numerical modeling, and computers to configure, run, and analyze the results to ensure you get the correct solution for your application. Therefore, we highly recommend users register at [https://www.myroms.org https://www.myroms.org] and set up a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;username&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; to access the &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum, email notifications for bugs/updates, technical support from the community, trac code maintenance history, tutorials, workshops, and publications. The User&#039;s &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum has over 24,000 posts with helpful information. Technical support is limited to registered users. We do not provide user technical support, usage, or answers in &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS GitHub&amp;lt;/span&amp;gt; repository also has its own wiki at [https://github.com/myroms/roms/wiki https://github.com/myroms/roms/wiki] with useful information and instructions. This &#039;&#039;&#039;GitHub&#039;&#039;&#039; version becomes the official &#039;&#039;&#039;Git&#039;&#039;&#039; repository for downloading, updating, improving, and correcting defects/bugs in the ROMS source code. Also, it is the version used in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/span&amp;gt; interface hosted at [https://github.com/JCSDA-internal https://github.com/JCSDA-internal], which is currently private.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6598</id>
		<title>Source Code</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Source_Code&amp;diff=6598"/>
		<updated>2023-12-08T16:52:52Z</updated>

		<summary type="html">&lt;p&gt;Arango: Created page with &amp;quot;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;  This official community version of &amp;#039;&amp;#039;&amp;#039;ROMS&amp;#039;&amp;#039;&amp;#039; is developed and maintained at Rutgers, The State University of N...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Regional Ocean Modeling System (ROMS)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This official community version of &#039;&#039;&#039;ROMS&#039;&#039;&#039; is developed and maintained at Rutgers, The State University of New Jersey, New Brunswick, New Jersey, USA. Currently, &#039;&#039;&#039;ROMS&#039;&#039;&#039; source code is distributed using both [https://git-scm.com Git] and [https://subversion.apache.org Subversion](SVN). However, starting &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;January 1, 2025&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; will be exclusively distributed from its &#039;&#039;&#039;GitHub&#039;&#039;&#039; repository at [https://github.com/myroms https://github.com/myroms]. Updating the &#039;&#039;&#039;SVN&#039;&#039;&#039; repositories at [https://www.myroms.org https://www.myroms.org] will be discontinued but kept for historical reasons.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS&#039;&#039;&#039; framework is intended for users interested in ocean modeling. It requires an extensive background in ocean dynamics, numerical modeling, and computers to configure, run, and analyze the results to ensure you get the correct solution for your application. Therefore, we highly recommend users register at [https://www.myroms.org https://www.myroms.org] and set up a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;username&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; to access the &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum, email notifications for bugs/updates, technical support from the community, trac code maintenance history, tutorials, workshops, and publications. The User&#039;s &#039;&#039;&#039;ROMS&#039;&#039;&#039; forum has over 24,000 posts with helpful information. Technical support is limited to registered users. We do not provide user technical support, usage, or answers in &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ROMS GitHub&amp;lt;/span&amp;gt; repository also has its own wiki at [https://github.com/myroms/roms/wiki https://github.com/myroms/roms/wiki] with useful information and instructions.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Intro&amp;diff=6595</id>
		<title>ROMS-JEDI Intro</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Intro&amp;diff=6595"/>
		<updated>2023-09-11T20:21:45Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit Template:ROMS-JEDI_TOC to modify this Table of Contents--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;margin: 0 20px 0 0;&amp;quot;&amp;gt;{{ROMS-JEDI_TOC}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:romsjedi_logo.png|left]]&lt;br /&gt;
[[Image:romsjedi_schematic.png|1000px|left]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Joint Effort for Data Assimilation Integration (&#039;&#039;&#039;JEDI&#039;&#039;&#039;) framework is a unified, high-level, state-of-the-art data assimilation (&#039;&#039;&#039;DA&#039;&#039;&#039;) system for scientific exploration and operational forecasting. The diagram above shows that the &#039;&#039;&#039;JEDI&#039;&#039;&#039; building blocks are model agnostic, and any modern geophysical numerical kernels can be interfaced. Its separable generic design and abstraction allow the implementation of various &#039;&#039;&#039;DA&#039;&#039;&#039; methodologies, including variational, ensemble, hybrid, and coupled approaches that are common to any geophysical system, without the need to develop such algorithms separately for each model. The &#039;&#039;&#039;JEDI&#039;&#039;&#039; framework is centered around the Object-Oriented Prediction System (&#039;&#039;&#039;OOPS&#039;&#039;&#039;) layer classes and operators implemented in &#039;&#039;&#039;C++&#039;&#039;&#039; using templates. The specific implementations like &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; are written in Fortran 2003 because of the need for class objects, polymorphism, inheritance, and interoperability between &#039;&#039;&#039;C++&#039;&#039;&#039; and &#039;&#039;&#039;Fortran&#039;&#039;&#039;. The interoperability binding allows &#039;&#039;&#039;Fortran&#039;&#039;&#039; to invoke &#039;&#039;&#039;C++&#039;&#039;&#039; functions and vice versa &#039;&#039;&#039;C++&#039;&#039;&#039; to invoke &#039;&#039;&#039;Fortran&#039;&#039;&#039; procedures.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;JEDI&#039;&#039;&#039; separation of concerns design allows the incorporation of diverse (current and future) observational data streams essential for any DA system. Observation operators can be efficiently coded and added to the Unified Forward Operator (&#039;&#039;&#039;UFO&#039;&#039;&#039;) interface, which simulates, interpolates, and relates observable data to the model component state vector, &#039;&#039;&#039;H(x)&#039;&#039;&#039;. The &#039;&#039;&#039;UFO&#039;&#039;&#039; interface also implements quality control, data thinning, and bias correction. The Interface for Observation Data Access (&#039;&#039;&#039;IODA&#039;&#039;&#039;) storage layer ingests observational data from providers into the &#039;&#039;&#039;UFO&#039;&#039;&#039; and &#039;&#039;&#039;OOPS&#039;&#039;&#039; building blocks. The immense amount of incoming data can be trimmed down, quality-controlled, and filtered by &#039;&#039;&#039;UFO&#039;&#039;&#039; operators before it is assimilated and during postprocessing when computing diagnostics, impacts, and sensitivities.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; framework is intended for users interested in ocean prediction and data assimilation. Currently, we use the &#039;&#039;&#039;JEDI&#039;&#039;&#039; framework to incorporate physical observational data into regional &#039;&#039;&#039;ROMS&#039;&#039;&#039; applications using variational (&#039;&#039;&#039;3DVar&#039;&#039;&#039;/&#039;&#039;&#039;4DVar&#039;&#039;&#039;, &#039;&#039;&#039;3D-FGAT&#039;&#039;&#039;/&#039;&#039;&#039;4D-FGAT&#039;&#039;&#039;), ensemble (&#039;&#039;&#039;EDA&#039;&#039;&#039;, &#039;&#039;&#039;EnKF&#039;&#039;&#039;, &#039;&#039;&#039;LETKF&#039;&#039;&#039;), and hybrid (&#039;&#039;&#039;3DEnVar&#039;&#039;&#039;/&#039;&#039;&#039;4DEnVar&#039;&#039;&#039;) data assimilation methodologies. The &#039;&#039;&#039;ROMS&#039;&#039;&#039; Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and Adjoint Model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) kernels are used in the &#039;&#039;&#039;4DVar&#039;&#039;&#039; family of algorithms.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Compiling&amp;diff=6594</id>
		<title>ROMS-JEDI Compiling</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Compiling&amp;diff=6594"/>
		<updated>2023-08-31T13:00:43Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Compiling ROMS-JEDI Default Application WC13 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Compiling ROMS-JEDI&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit Template:ROMS-JEDI_TOC to modify this Table of Contents--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;margin: 0 20px 0 0;&amp;quot;&amp;gt;{{ROMS-JEDI_TOC}}&amp;lt;/div&amp;gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configuring GIT==&lt;br /&gt;
&lt;br /&gt;
Before downloading the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; repository, ensure that your &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039; has the appropriate &#039;&#039;&#039;git-lfs&#039;&#039;&#039; configuration for correctly downloading the default application (U.S. West Coast, &#039;&#039;&#039;WC13&#039;&#039;&#039; option) input and observation NetCDF files. Otherwise, the &#039;&#039;&#039;Unit Test Cases&#039;&#039;&#039; requiring input NetCDF files will fail. The &#039;&#039;&#039;Git LFS&#039;&#039;&#039; is a command line extension and specification for managing large files with &#039;&#039;&#039;Git&#039;&#039;&#039;. A sample of the configuration file looks like this:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;more ~/.gitconf&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[User]&amp;lt;br /&amp;gt;     name = GivenName MiddleName FamilyName&amp;lt;br /&amp;gt;     email = your@email&amp;lt;br /&amp;gt;[credential]&amp;lt;br /&amp;gt;     helper = cache --timeout=7200&amp;lt;br /&amp;gt;     helper = store --file ~/.my-credentials&amp;lt;br /&amp;gt;[filter &amp;quot;lfs&amp;quot;]&amp;lt;br /&amp;gt;     clean = git-lfs clean -- %f&amp;lt;br /&amp;gt;     smudge = git-lfs smudge -- %f&amp;lt;br /&amp;gt;     process = git-lfs filter-process&amp;lt;br /&amp;gt;     required = true&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may execute &#039;&#039;&#039;git lfs pull&#039;&#039;&#039; at your location of this repository to download a viable version of the &#039;&#039;&#039;Git LFS&#039;&#039;&#039; files from the remote repository in &#039;&#039;&#039;GitHub&#039;&#039;&#039;. Also, to automatically add the &#039;&#039;&#039;LFS&#039;&#039;&#039; filter to your existing &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039;, you could use &#039;&#039;&#039;git lfs install&#039;&#039;&#039; from anywhere in your computer directories.&lt;br /&gt;
&lt;br /&gt;
==Downloading ROMS-JEDI==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; repository is private within the Joint Center for Satellite Data Assimilation (&#039;&#039;&#039;JCSDA&#039;&#039;&#039;) community. Users need to be partners, contributors, or members of &#039;&#039;&#039;JCSDA&#039;&#039;&#039; to access all the &#039;&#039;&#039;JEDI&#039;&#039;&#039; components that are part of the abstract layer infrastructure centered around the Object Oriented Prediction System (&#039;&#039;&#039;OOPS&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Use the following command to download the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; interface:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/JCSDA-internal/roms-jedi.git&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* Make sure you have the &#039;&#039;&#039;spack-stack&#039;&#039;&#039; software installed for either &#039;&#039;&#039;gfortran&#039;&#039;&#039; or &#039;&#039;&#039;ifort&#039;&#039;&#039; containing several packages need to run the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; interface. For more information, please check https://github.com/JCSDA/spack-stack.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;In our computers at Rutgers University, the &#039;&#039;&#039;spack-stack&#039;&#039;&#039; can be loaded by executing either:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;module purge;  module load stack-gcc;    module list&amp;lt;/span&amp;gt;                     (gfortran compiler)&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;module purge;  module load stack-intel;  module list&amp;lt;/span&amp;gt;                     (ifort compiler)&amp;lt;/div&amp;gt;Installing the &#039;&#039;&#039;spack-stack&#039;&#039;&#039; is not trivial and requires computer software expertise.&lt;br /&gt;
&lt;br /&gt;
* We also like to define the &#039;&#039;&#039;MPIRUN&#039;&#039;&#039; environmental variable to specify the &#039;&#039;&#039;MPI&#039;&#039;&#039; executable in a particular computer (say, &#039;&#039;&#039;srun&#039;&#039;&#039;, &#039;&#039;&#039;mpirun&#039;&#039;&#039;, etc.). We need the full path for &#039;&#039;&#039;ctest&#039;&#039;&#039; to work. Notice that we specify this executable in the &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command below.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;For example:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;setenv MPIRUN /opt/slurm/bin/srun&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Several environment variables can be activated for &#039;&#039;&#039;verbose debugging&#039;&#039;&#039; of the building blocks for the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; interface: (use &#039;&#039;&#039;1&#039;&#039;&#039; or &#039;&#039;&#039;true&#039;&#039;&#039; to activate and &#039;&#039;&#039;0&#039;&#039;&#039; or &#039;&#039;&#039;false&#039;&#039;&#039; to deactivate)&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;setenv LdebugGeometry             1&amp;lt;br /&amp;gt;setenv LdebugAnalyticInit         1&amp;lt;br /&amp;gt;setenv LdebugField                1&amp;lt;br /&amp;gt;setenv LdebugFields               1&amp;lt;br /&amp;gt;setenv LdebugFieldsUtils          1&amp;lt;br /&amp;gt;setenv LdebugGeometry             1&amp;lt;br /&amp;gt;setenv LdebugLinearModel          1&amp;lt;br /&amp;gt;setenv LdebugLinearModel2Geovals  1&amp;lt;br /&amp;gt;setenv LdebugModel                1&amp;lt;br /&amp;gt;setenv LdebugModel2Geovals        1&amp;lt;br /&amp;gt;setenv LdebugTrajectory           1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compiling ROMS-JEDI Default Application WC13==&lt;br /&gt;
&lt;br /&gt;
By default, &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; is configured with a coarse (54x53x30 grid points) US West Coast (&#039;&#039;&#039;WC13&#039;&#039;&#039;) application. See [[4DVar Tutorial Introduction]] for detailed information about the &#039;&#039;&#039;WC13&#039;&#039;&#039; configuration. However, any other ROMS application can be configured by including in the &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command the directives &#039;&#039;&#039;-D&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS_APP&amp;lt;/span&amp;gt;=MyAppCPP&#039;&#039;&#039; and &#039;&#039;&#039;-D&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS_APP_DIR&amp;lt;/span&amp;gt;=MyAppDirPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The strategy is to create a &#039;&#039;&#039;Bundle&#039;&#039;&#039; and &#039;&#039;&#039;build&#039;&#039;&#039; subdirectory for each &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; application. For &#039;&#039;&#039;WC13&#039;&#039;&#039; (default), we create &#039;&#039;&#039;Bundle_wc13&#039;&#039;&#039; and &#039;&#039;&#039;build_wc13&#039;&#039;&#039; below. Please follow the following steps to configure &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; in your computer:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/JCSDA-internal/roms-jedi.git&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;  !&amp;gt; If the first time on your computer&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; ROMS-JEDI interface directory, &amp;lt;interface_dir&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir Bundle_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cp bundle/.gitignore bundle/CMakeLists.txt Bundle_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir build_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd build_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ecbuild -DMPIEXEC_EXECUTABLE=$MPIRUN -DMPIEXEC_NUMPROC_FLAG=&amp;quot;-n&amp;quot; -DCMAKE_BUILD_TYPE=Release ../Bundle_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;make -j 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_wc13/roms-jedi&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -N&amp;lt;/span&amp;gt;                                                   !&amp;gt; lists all the Unit Tests available&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -E -V get_&amp;lt;/span&amp;gt;                                           !&amp;gt; runs all the Unit Tests&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd test/Data&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_wc13/roms-jedi/test/Data&amp;lt;br /&amp;gt;                                                           !&amp;gt; to check the results in various sub-directories&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command will clone the required &#039;&#039;&#039;JEDI&#039;&#039;&#039; components that are specified in &#039;&#039;&#039;Bundle_wc13/CMakeList.txt&#039;&#039;&#039;. For example:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;# Required repositories&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT roms       GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/myroms/roms.git&amp;lt;/nowiki&amp;gt;&amp;quot;                 BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT oops       GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/oops.git&amp;lt;/nowiki&amp;gt;&amp;quot;         BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT vader      GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/vader.git&amp;lt;/nowiki&amp;gt;&amp;quot;        BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT saber      GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/saber.git&amp;lt;/nowiki&amp;gt;&amp;quot;        BRANCH develop UPDATE )&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT gsw        GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/GSW-Fortran.git&amp;lt;/nowiki&amp;gt;&amp;quot;  BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT ioda       GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/ioda.git&amp;lt;/nowiki&amp;gt;&amp;quot;         BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT ufo        GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/ufo.git&amp;lt;/nowiki&amp;gt;&amp;quot;          BRANCH develop UPDATE )&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT roms-jedi  SOURCE ../ )&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ecbuild&#039;&#039;&#039; tool builds by default the &#039;&#039;&#039;RelWithDebInfo&#039;&#039;&#039; (&#039;&#039;&#039;-O2 -g&#039;&#039;&#039; options) for optimized with debugging information version of &#039;&#039;&#039;JEDI&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039;, rendering slower execution. However, for faster and optimized execution, we include the directive &#039;&#039;&#039;-DCMAKE_BUILD_TYPE=Release&#039;&#039;&#039; to the &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command. For debugging with TotalView, we include instead the directive &#039;&#039;&#039;-DCMAKE_BUILD_TYPE=Debug&#039;&#039;&#039;, which is much slower.&lt;br /&gt;
&lt;br /&gt;
==Compiling other ROMS-JEDI Applications==&lt;br /&gt;
&lt;br /&gt;
Any &#039;&#039;&#039;ROMS&#039;&#039;&#039; application can be run in &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; by specifying the appropriate CPP option and necessary input files. Only &#039;&#039;&#039;WC13&#039;&#039;&#039; is provided with the interface. However, we facilitate how to run such applications. Notice that the &#039;&#039;&#039;WC13&#039;&#039;&#039; configuration and input files are located in &#039;&#039;&#039;roms-jedi/test/Applications/wc13&#039;&#039;&#039;. The template input YAML files are located &#039;&#039;&#039;roms-jedi/test/templates&#039;&#039;&#039;. We use a &#039;&#039;&#039;Perl&#039;&#039;&#039; script to create the application input YAML files from the templates. Please check in &#039;&#039;&#039;roms-jedi/test/Applications/wc13/testinput&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For example, if running the U.S. East Coast &#039;&#039;&#039;DOPPIO&#039;&#039;&#039; application (240x104x40 grid points) or any other, please follow the following steps to configure &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; ROMS-JEDI interface directory, &amp;lt;interface_dir&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir Bundle_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cp bundle/.gitignore bundle/CMakeLists.txt Bundle_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir build_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd build_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ecbuild -DMPIEXEC_EXECUTABLE=$MPIRUN -DMPIEXEC_NUMPROC_FLAG=&amp;quot;-n&amp;quot; -DROMS_APP=&amp;quot;DOPPIO&amp;quot; \&amp;lt;br /&amp;gt;-DROMS_APP_DIR=&amp;quot;DOPPIOpath&amp;quot; -DCMAKE_BUILD_TYPE=Release ../Bundle_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;make -j 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_doppio/roms-jedi&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -N&amp;lt;/span&amp;gt;                                                   !&amp;gt; lists all the Unit Tests available&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -E -V get_&amp;lt;/span&amp;gt;                                           !&amp;gt; runs all the Unit Test&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd test/Data&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_doppio/roms-doppio/test/Data&amp;lt;br /&amp;gt;                                                           !&amp;gt; to check the results in various sub-directories&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Compiling&amp;diff=6593</id>
		<title>ROMS-JEDI Compiling</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Compiling&amp;diff=6593"/>
		<updated>2023-08-31T05:06:18Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Compiling ROMS-JEDI Default Application WC13 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Compiling ROMS-JEDI&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit Template:ROMS-JEDI_TOC to modify this Table of Contents--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;margin: 0 20px 0 0;&amp;quot;&amp;gt;{{ROMS-JEDI_TOC}}&amp;lt;/div&amp;gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configuring GIT==&lt;br /&gt;
&lt;br /&gt;
Before downloading the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; repository, ensure that your &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039; has the appropriate &#039;&#039;&#039;git-lfs&#039;&#039;&#039; configuration for correctly downloading the default application (U.S. West Coast, &#039;&#039;&#039;WC13&#039;&#039;&#039; option) input and observation NetCDF files. Otherwise, the &#039;&#039;&#039;Unit Test Cases&#039;&#039;&#039; requiring input NetCDF files will fail. The &#039;&#039;&#039;Git LFS&#039;&#039;&#039; is a command line extension and specification for managing large files with &#039;&#039;&#039;Git&#039;&#039;&#039;. A sample of the configuration file looks like this:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;more ~/.gitconf&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[User]&amp;lt;br /&amp;gt;     name = GivenName MiddleName FamilyName&amp;lt;br /&amp;gt;     email = your@email&amp;lt;br /&amp;gt;[credential]&amp;lt;br /&amp;gt;     helper = cache --timeout=7200&amp;lt;br /&amp;gt;     helper = store --file ~/.my-credentials&amp;lt;br /&amp;gt;[filter &amp;quot;lfs&amp;quot;]&amp;lt;br /&amp;gt;     clean = git-lfs clean -- %f&amp;lt;br /&amp;gt;     smudge = git-lfs smudge -- %f&amp;lt;br /&amp;gt;     process = git-lfs filter-process&amp;lt;br /&amp;gt;     required = true&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may execute &#039;&#039;&#039;git lfs pull&#039;&#039;&#039; at your location of this repository to download a viable version of the &#039;&#039;&#039;Git LFS&#039;&#039;&#039; files from the remote repository in &#039;&#039;&#039;GitHub&#039;&#039;&#039;. Also, to automatically add the &#039;&#039;&#039;LFS&#039;&#039;&#039; filter to your existing &#039;&#039;&#039;~/.gitconfig&#039;&#039;&#039;, you could use &#039;&#039;&#039;git lfs install&#039;&#039;&#039; from anywhere in your computer directories.&lt;br /&gt;
&lt;br /&gt;
==Downloading ROMS-JEDI==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; repository is private within the Joint Center for Satellite Data Assimilation (&#039;&#039;&#039;JCSDA&#039;&#039;&#039;) community. Users need to be partners, contributors, or members of &#039;&#039;&#039;JCSDA&#039;&#039;&#039; to access all the &#039;&#039;&#039;JEDI&#039;&#039;&#039; components that are part of the abstract layer infrastructure centered around the Object Oriented Prediction System (&#039;&#039;&#039;OOPS&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Use the following command to download the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; interface:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/JCSDA-internal/roms-jedi.git&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* Make sure you have the &#039;&#039;&#039;spack-stack&#039;&#039;&#039; software installed for either &#039;&#039;&#039;gfortran&#039;&#039;&#039; or &#039;&#039;&#039;ifort&#039;&#039;&#039; containing several packages need to run the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; interface. For more information, please check https://github.com/JCSDA/spack-stack.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;In our computers at Rutgers University, the &#039;&#039;&#039;spack-stack&#039;&#039;&#039; can be loaded by executing either:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;module purge;  module load stack-gcc;    module list&amp;lt;/span&amp;gt;                     (gfortran compiler)&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;module purge;  module load stack-intel;  module list&amp;lt;/span&amp;gt;                     (ifort compiler)&amp;lt;/div&amp;gt;Installing the &#039;&#039;&#039;spack-stack&#039;&#039;&#039; is not trivial and requires computer software expertise.&lt;br /&gt;
&lt;br /&gt;
* We also like to define the &#039;&#039;&#039;MPIRUN&#039;&#039;&#039; environmental variable to specify the &#039;&#039;&#039;MPI&#039;&#039;&#039; executable in a particular computer (say, &#039;&#039;&#039;srun&#039;&#039;&#039;, &#039;&#039;&#039;mpirun&#039;&#039;&#039;, etc.). We need the full path for &#039;&#039;&#039;ctest&#039;&#039;&#039; to work. Notice that we specify this executable in the &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command below.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;For example:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;setenv MPIRUN /opt/slurm/bin/srun&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Several environment variables can be activated for &#039;&#039;&#039;verbose debugging&#039;&#039;&#039; of the building blocks for the &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; interface: (use &#039;&#039;&#039;1&#039;&#039;&#039; or &#039;&#039;&#039;true&#039;&#039;&#039; to activate and &#039;&#039;&#039;0&#039;&#039;&#039; or &#039;&#039;&#039;false&#039;&#039;&#039; to deactivate)&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;setenv LdebugGeometry             1&amp;lt;br /&amp;gt;setenv LdebugAnalyticInit         1&amp;lt;br /&amp;gt;setenv LdebugField                1&amp;lt;br /&amp;gt;setenv LdebugFields               1&amp;lt;br /&amp;gt;setenv LdebugFieldsUtils          1&amp;lt;br /&amp;gt;setenv LdebugGeometry             1&amp;lt;br /&amp;gt;setenv LdebugLinearModel          1&amp;lt;br /&amp;gt;setenv LdebugLinearModel2Geovals  1&amp;lt;br /&amp;gt;setenv LdebugModel                1&amp;lt;br /&amp;gt;setenv LdebugModel2Geovals        1&amp;lt;br /&amp;gt;setenv LdebugTrajectory           1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compiling ROMS-JEDI Default Application WC13==&lt;br /&gt;
&lt;br /&gt;
By default, &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; is configured with a coarse (54x53x30 grid points) US West Coast (&#039;&#039;&#039;WC13&#039;&#039;&#039;) application. See [[4DVar Tutorial Introduction]] for detailed information about the &#039;&#039;&#039;WC13&#039;&#039;&#039; configuration. However, any other ROMS application can be configured by including in the &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command the directives &#039;&#039;&#039;-D&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS_APP&amp;lt;/span&amp;gt;=MyAppCPP&#039;&#039;&#039; and &#039;&#039;&#039;-D&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS_APP_DIR&amp;lt;/span&amp;gt;=MyAppDirPath&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The strategy is to create a &#039;&#039;&#039;Bundle&#039;&#039;&#039; and &#039;&#039;&#039;build&#039;&#039;&#039; subdirectory for each &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; application. For &#039;&#039;&#039;WC13&#039;&#039;&#039; (default), we create &#039;&#039;&#039;Bundle_wc13&#039;&#039;&#039; and &#039;&#039;&#039;build_wc13&#039;&#039;&#039; below. Please follow the following steps to configure &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; in your computer:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/JCSDA-internal/roms-jedi.git&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;  !&amp;gt; If the first time on your computer&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; ROMS-JEDI interface directory, &amp;lt;interface_dir&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir Bundle_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cp bundle/.gitignore bundle/CMakeLists.txt Bundle_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir build_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd build_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ecbuild -DMPIEXEC_EXECUTABLE=$MPIRUN -DMPIEXEC_NUMPROC_FLAG=&amp;quot;-n&amp;quot; -DCMAKE_BUILD_TYPE=Release ../Bundle_wc13&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;make -j 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_wc13/roms-jedi&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -N&amp;lt;/span&amp;gt;                                                   !&amp;gt; lists all the Unit Tests available&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -E -V get_&amp;lt;/span&amp;gt;                                           !&amp;gt; runs all the Unit Tests&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd test/Data&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_wc13/roms-jedi/test/Data&amp;lt;br /&amp;gt;                                                           !&amp;gt; to check the results in various sub-directories&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command will clone the required &#039;&#039;&#039;JEDI&#039;&#039;&#039; components that are specified in &#039;&#039;&#039;Bundle_wc13/CMakeList.txt&#039;&#039;&#039;. For example:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;# Required repositories&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT roms       GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/JCSDA-internal/roms_src.git&amp;lt;/nowiki&amp;gt;&amp;quot;     BRANCH master  UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT oops       GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/oops.git&amp;lt;/nowiki&amp;gt;&amp;quot;         BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT vader      GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/vader.git&amp;lt;/nowiki&amp;gt;&amp;quot;        BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT saber      GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/saber.git&amp;lt;/nowiki&amp;gt;&amp;quot;        BRANCH develop UPDATE )&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT gsw        GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/GSW-Fortran.git&amp;lt;/nowiki&amp;gt;&amp;quot;  BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT ioda       GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/ioda.git&amp;lt;/nowiki&amp;gt;&amp;quot;         BRANCH develop UPDATE )&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT ufo        GIT &amp;quot;&amp;lt;nowiki&amp;gt;https://github.com/jcsda-internal/ufo.git&amp;lt;/nowiki&amp;gt;&amp;quot;          BRANCH develop UPDATE )&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ecbuild_bundle( PROJECT roms-jedi  SOURCE ../ )&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ecbuild&#039;&#039;&#039; tool builds by default the &#039;&#039;&#039;RelWithDebInfo&#039;&#039;&#039; (&#039;&#039;&#039;-O2 -g&#039;&#039;&#039; options) for optimized with debugging information version of &#039;&#039;&#039;JEDI&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039;, rendering slower execution. However, for faster and optimized execution, we include the directive &#039;&#039;&#039;-DCMAKE_BUILD_TYPE=Release&#039;&#039;&#039; to the &#039;&#039;&#039;ecbuild&#039;&#039;&#039; command. For debugging with TotalView, we include instead the directive &#039;&#039;&#039;-DCMAKE_BUILD_TYPE=Debug&#039;&#039;&#039;, which is much slower.&lt;br /&gt;
&lt;br /&gt;
==Compiling other ROMS-JEDI Applications==&lt;br /&gt;
&lt;br /&gt;
Any &#039;&#039;&#039;ROMS&#039;&#039;&#039; application can be run in &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; by specifying the appropriate CPP option and necessary input files. Only &#039;&#039;&#039;WC13&#039;&#039;&#039; is provided with the interface. However, we facilitate how to run such applications. Notice that the &#039;&#039;&#039;WC13&#039;&#039;&#039; configuration and input files are located in &#039;&#039;&#039;roms-jedi/test/Applications/wc13&#039;&#039;&#039;. The template input YAML files are located &#039;&#039;&#039;roms-jedi/test/templates&#039;&#039;&#039;. We use a &#039;&#039;&#039;Perl&#039;&#039;&#039; script to create the application input YAML files from the templates. Please check in &#039;&#039;&#039;roms-jedi/test/Applications/wc13/testinput&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For example, if running the U.S. East Coast &#039;&#039;&#039;DOPPIO&#039;&#039;&#039; application (240x104x40 grid points) or any other, please follow the following steps to configure &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039;:&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; ROMS-JEDI interface directory, &amp;lt;interface_dir&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir Bundle_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cp bundle/.gitignore bundle/CMakeLists.txt Bundle_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mkdir build_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd build_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ecbuild -DMPIEXEC_EXECUTABLE=$MPIRUN -DMPIEXEC_NUMPROC_FLAG=&amp;quot;-n&amp;quot; -DROMS_APP=&amp;quot;DOPPIO&amp;quot; \&amp;lt;br /&amp;gt;-DROMS_APP_DIR=&amp;quot;DOPPIOpath&amp;quot; -DCMAKE_BUILD_TYPE=Release ../Bundle_doppio&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;make -j 10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd roms-jedi&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_doppio/roms-jedi&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -N&amp;lt;/span&amp;gt;                                                   !&amp;gt; lists all the Unit Tests available&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ctest -E -V get_&amp;lt;/span&amp;gt;                                           !&amp;gt; runs all the Unit Test&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cd test/Data&amp;lt;/span&amp;gt;                                               !&amp;gt; sub-directory: &amp;lt;interface_dir&amp;gt;/build_doppio/roms-doppio/test/Data&amp;lt;br /&amp;gt;                                                           !&amp;gt; to check the results in various sub-directories&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6592</id>
		<title>Documentation Portal</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Documentation_Portal&amp;diff=6592"/>
		<updated>2023-08-31T04:58:22Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Documentation Portal&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;main&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%&amp;quot; |   &amp;lt;!-- Left Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Technical Documentation&#039;&#039;&#039;&lt;br /&gt;
* [[Regional_Ocean_Modeling_System_(ROMS) | Introduction]]&lt;br /&gt;
* [[Equations of Motion]]&lt;br /&gt;
* [[Vertical S-coordinate]]&lt;br /&gt;
* [[Terrain-Following Coordinate Transformation]]&lt;br /&gt;
* [[Curvilinear Coordinates Transformation]]&lt;br /&gt;
* [[Fractional Coordinate System (&amp;amp;xi; - &amp;amp;eta; space)]]&lt;br /&gt;
* [[Time-stepping Schemes Review]]&lt;br /&gt;
* [[Numerical Solution Technique]]&lt;br /&gt;
* [[Nested Grids]]&lt;br /&gt;
* [[Boundary Conditions]]&lt;br /&gt;
* [[Horizontal Mixing]]&lt;br /&gt;
* [[Vertical Mixing Parameterizations]]&lt;br /&gt;
* [[Atmospheric Boundary Layer]]&lt;br /&gt;
* [[Bottom Boundary Layer]]&lt;br /&gt;
* [[Lagrangian Drifters]]&lt;br /&gt;
* [[Balance Term Diagnostics]]&lt;br /&gt;
* [[Biogeochemical Models]]&lt;br /&gt;
* [[Sediment Model]]&lt;br /&gt;
* [[Wave Model]]&lt;br /&gt;
* [[Atmospheric Model]]&lt;br /&gt;
* [[Model Coupling]]&lt;br /&gt;
** [[NUOPC_Cap | ROMS Native ESMF/NUOPC Cap]]&lt;br /&gt;
** [[NUOPC_Cap_UFS | ROMS Stand-Alone ESMF/NUOPC Cap]]&lt;br /&gt;
* [[Model Diagnostics]]&lt;br /&gt;
* [[Sea-Ice Model]]&lt;br /&gt;
* [[Variational Data Assimilation]]&lt;br /&gt;
* [[ROMS-JEDI_Intro| ROMS-JEDI]]&lt;br /&gt;
** [[ROMS-JEDI_Compiling | Compiling]]&lt;br /&gt;
** [[ROMS-JEDI_Implementation | Implementation]]&lt;br /&gt;
** [[ROMS-JEDI_Observations | Observations]]&lt;br /&gt;
** [[ROMS-JEDI_Unit_Test_Cases | Unit Test Cases]]&lt;br /&gt;
* [[IO | ROMS I/O]]&lt;br /&gt;
* [[Bibliography]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Middle Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;User Guide&#039;&#039;&#039;&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Nesting Examples]]&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[Source Code]]&lt;br /&gt;
** [[Git]]&lt;br /&gt;
** [[Subversion]]&lt;br /&gt;
** [[Modules]]&lt;br /&gt;
** [[Drivers]]&lt;br /&gt;
** [[Subroutines]]&lt;br /&gt;
** [[Variables]]&lt;br /&gt;
** [[Functionals]]&lt;br /&gt;
** [[Lateral Boundary Conditions]]&lt;br /&gt;
* [[C Preprocessor]]&lt;br /&gt;
** [[Options]]&lt;br /&gt;
** [[cppdefs.h]]&lt;br /&gt;
** [[globaldefs.h]]&lt;br /&gt;
* [[Compiling and Linking]]&lt;br /&gt;
** [[makefile]]&lt;br /&gt;
** [[build_roms]]&lt;br /&gt;
** [[my_build_paths]]&lt;br /&gt;
** [[make]]&lt;br /&gt;
** [[gmake]]&lt;br /&gt;
** [[MakeDepend]]&lt;br /&gt;
** [[External Libraries]]&lt;br /&gt;
* [[Parallelization]]&lt;br /&gt;
* [[Benchmarking]]&lt;br /&gt;
* [[Matlab Scripts]]&lt;br /&gt;
* [[Visualization]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top;width:33%;border-left:1px solid #aaa;padding-left:1em&amp;quot;| &amp;lt;!-- Right Column Portal --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Examples and Applications&#039;&#039;&#039;&lt;br /&gt;
* [[Test Cases]]&lt;br /&gt;
* [[Model Coupling ESMF | Coupling Examples]]&lt;br /&gt;
* [[Lake_Jersey_Refinement_Example_Introduction | Nesting Examples]]&lt;br /&gt;
* [[Application Set-up]]&lt;br /&gt;
* [[Metadata Design]]&lt;br /&gt;
** [[YAML_Parser | YAML Parser]]&lt;br /&gt;
** [[coupling_esmf_atm.yaml]]&lt;br /&gt;
** [[roms_cmeps.yaml]] &lt;br /&gt;
** [[varinfo.yaml]]&lt;br /&gt;
* [[Grid Generation]]&lt;br /&gt;
* [[Initialization]]&lt;br /&gt;
* [[Forcing]]&lt;br /&gt;
** [[Atmospheric Forcing]]&lt;br /&gt;
** [[Tidal Forcing]]&lt;br /&gt;
** [[River Runoff]]&lt;br /&gt;
* [[Input Parameter Files]]&lt;br /&gt;
** [[roms.in]]&lt;br /&gt;
** [[s4dvar.in]]&lt;br /&gt;
** [[biology.in]]&lt;br /&gt;
** [[sediment.in]]&lt;br /&gt;
** [[floats.in]]&lt;br /&gt;
** [[stations.in]]&lt;br /&gt;
** [[ice.in]]&lt;br /&gt;
** [[swan.in]]&lt;br /&gt;
* [[Standard Output Files]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:ROMS_circle_logo.png]] &amp;amp;nbsp; [[Image:ROMS-JEDI_circle_logo.png]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Intro&amp;diff=6591</id>
		<title>ROMS-JEDI Intro</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=ROMS-JEDI_Intro&amp;diff=6591"/>
		<updated>2023-08-31T04:56:47Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS-JEDI&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit Template:ROMS-JEDI_TOC to modify this Table of Contents--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;margin: 0 20px 0 0;&amp;quot;&amp;gt;{{ROMS-JEDI_TOC}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:romsjedi_logo.png|left]]&lt;br /&gt;
[[Image:romsjedi_schematic.png|1000px|left]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Joint Effort for Data Assimilation Integration (&#039;&#039;&#039;JEDI&#039;&#039;&#039;) framework is a unified, high-level, state-of-the-art data assimilation (&#039;&#039;&#039;DA&#039;&#039;&#039;) system for scientific exploration and operational forecasting. The diagram above shows that the &#039;&#039;&#039;JEDI&#039;&#039;&#039; building blocks are model agnostic, and any modern geophysical numerical kernels can be interfaced. Its separable generic design and abstraction allow the implementation of various &#039;&#039;&#039;DA&#039;&#039;&#039; methodologies, including variational, ensemble, hybrid, and coupled approaches that are common to any geophysical system, without the need to develop such algorithms separately for each model technically. The &#039;&#039;&#039;JEDI&#039;&#039;&#039; framework is centered around the Object-Oriented Prediction System (&#039;&#039;&#039;OOPS&#039;&#039;&#039;) layer classes and operators implemented in &#039;&#039;&#039;C++&#039;&#039;&#039; using templates. The specific implementations like &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; are written in Fortran 2003 because of the need for class objects, polymorphism, inheritance, and interoperability between &#039;&#039;&#039;C++&#039;&#039;&#039; and &#039;&#039;&#039;Fortran&#039;&#039;&#039;. The interoperability binding allows &#039;&#039;&#039;Fortran&#039;&#039;&#039; to invoke &#039;&#039;&#039;C++&#039;&#039;&#039; functions and vice versa &#039;&#039;&#039;C++&#039;&#039;&#039; to invoke &#039;&#039;&#039;Fortran&#039;&#039;&#039; procedures.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;JEDI&#039;&#039;&#039; separation of concerns design allows the incorporation of diverse (current and future) observational data streams essential for any DA system. Observation operators can be efficiently coded and added to the Unified Forward Operator (&#039;&#039;&#039;UFO&#039;&#039;&#039;) interface, which simulates, interpolates, and relates observable data to the model component state vector, &#039;&#039;&#039;H(x)&#039;&#039;&#039;. The &#039;&#039;&#039;UFO&#039;&#039;&#039; interface also implements quality control, data thinning, and bias correction. The Interface for Observation Data Access (&#039;&#039;&#039;IODA&#039;&#039;&#039;) storage layer ingests observational data from providers into the &#039;&#039;&#039;UFO&#039;&#039;&#039; and &#039;&#039;&#039;OOPS&#039;&#039;&#039; building blocks. The immense amount of incoming data can be trimmed down, quality-controlled, and filtered by &#039;&#039;&#039;UFO&#039;&#039;&#039; operators before it is assimilated and during postprocessing when computing diagnostics, impacts, and sensitivities.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ROMS-JEDI&#039;&#039;&#039; framework is intended for users interested in ocean prediction and data assimilation. Currently, we use the &#039;&#039;&#039;JEDI&#039;&#039;&#039; framework to incorporate physical observational data into regional &#039;&#039;&#039;ROMS&#039;&#039;&#039; applications using variational (&#039;&#039;&#039;3DVar&#039;&#039;&#039;/&#039;&#039;&#039;4DVar&#039;&#039;&#039;, &#039;&#039;&#039;3D-FGAT&#039;&#039;&#039;/&#039;&#039;&#039;4D-FGAT&#039;&#039;&#039;), ensemble (&#039;&#039;&#039;EDA&#039;&#039;&#039;, &#039;&#039;&#039;EnKF&#039;&#039;&#039;, &#039;&#039;&#039;LETKF&#039;&#039;&#039;), and hybrid (&#039;&#039;&#039;3DEnVar&#039;&#039;&#039;/&#039;&#039;&#039;4DEnVar&#039;&#039;&#039;) data assimilation methodologies. The &#039;&#039;&#039;ROMS&#039;&#039;&#039; Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and Adjoint Model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) kernels are used in the &#039;&#039;&#039;4DVar&#039;&#039;&#039; family of algorithms.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6564</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6564"/>
		<updated>2023-03-11T20:51:32Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(file with only 2 cycling time records)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  365.0d0             ! days &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(ROMS is initialized on 2007-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(zero phase date is set when preparing the tidal data for 2006-01-01)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(Very important: ROMS time is seconds since 2006-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain &#039;&#039;&#039;5&#039;&#039;&#039;-time records because of the initial conditions, and the rest of the files will have &#039;&#039;&#039;4&#039;&#039;&#039;-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain &#039;&#039;&#039;9&#039;&#039;&#039;-time records, and the rest will have &#039;&#039;&#039;8&#039;&#039;&#039;-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. If [[Variables#dstart|DSTART]] is changed, it will reset the timestep internal counter &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;iic(ng)&amp;lt;/span&amp;gt;, and we are in deep trouble! Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6563</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6563"/>
		<updated>2023-03-11T20:49:59Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(file with only 2 cycling time records)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  365.0d0             ! days &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(ROMS is initialized on 2007-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(zero phase date is set when preparing the tidal data for 2006-01-01)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(Very important: ROMS time is seconds since 2006-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. If [[Variables#dstart|DSTART]] is changed, it will reset the timestep internal counter &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;iic(ng)&amp;lt;/span&amp;gt;, and we are in deep trouble! Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6562</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6562"/>
		<updated>2023-03-11T20:43:30Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(file with only 2 cycling time records)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  365.0d0             ! days &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(ROMS is initialized on 2007-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(Very important: ROMS time is seconds since 2006-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. If [[Variables#dstart|DSTART]] is changed, it will reset the timestep internal counter &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;iic(ng)&amp;lt;/span&amp;gt;, and we are in deep trouble! Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6561</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6561"/>
		<updated>2023-03-11T20:39:56Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(file with only 2 cycling time records)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  365.0d0             ! days &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(ROMS is initialized on 2007-01-01 00:00:00Z)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. If [[Variables#dstart|DSTART]] is changed, it will reset the timestep internal counter &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;iic(ng)&amp;lt;/span&amp;gt;, and we are in deep trouble! Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6560</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6560"/>
		<updated>2023-03-11T20:32:49Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(file with only 2 cycling time records)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  366.0d0             ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. If [[Variables#dstart|DSTART]] is changed, it will reset the timestep internal counter &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;iic(ng)&amp;lt;/span&amp;gt;, and we are in deep trouble! Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6559</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6559"/>
		<updated>2023-03-11T20:26:49Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  366.0d0             ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. If [[Variables#dstart|DSTART]] is changed, it will reset the timestep internal counter &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;iic(ng)&amp;lt;/span&amp;gt;, and we are in deep trouble! Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6558</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6558"/>
		<updated>2023-03-11T20:21:58Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  366.0d0             ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt; files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You &#039;&#039;&#039;cannot&#039;&#039;&#039; change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. Notice that the value [[Variables#nRST|NRST]] is crucial for the restart of ROMS with multi-file. In addition, we need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]] because of the accumulation sums when computing time-averaging fields. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6557</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6557"/>
		<updated>2023-03-11T20:13:50Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular region with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds, as shown below. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; output data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  366.0d0             ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the averages and diagnostic files are single records files representing daily averaged fields. The above analysis also holds when converted to time in seconds since every parameter is multiplied by the [[Variables#dt|DT]] timestep.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You cannot change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. Notice that the value [[Variables#nRST|NRST]] is crucial for all the restart of ROMS with multi-file. We need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]]. If balancing terms and budgets from output data, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6556</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6556"/>
		<updated>2023-03-11T19:56:46Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output data (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular area with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and quicksave data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  366.0d0             ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the averages and diagnostic files are single records files representing daily averaged fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You cannot change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. Notice that the value [[Variables#nRST|NRST]] is crucial for all the restart of ROMS with multi-file. We need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]]. If doing balancing terms and budgets, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6555</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6555"/>
		<updated>2023-03-11T19:50:25Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Output Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular area with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and quicksave data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day; 365 days simulation)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  366.0d0             ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  20060101.0d0        ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the averages and diagnostic files are single records files representing daily averaged fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You cannot change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. Notice that the value [[Variables#nRST|NRST]] is crucial for all the restart of ROMS with multi-file. We need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]]. If doing balancing terms and budgets, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6554</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6554"/>
		<updated>2023-03-11T19:45:28Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Ouput Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Output Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular area with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and quicksave data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamp assigned for model initialization, reference time origin for tidal forcing, and model reference time for output NetCDF units attribute.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#dstart|DSTART]] =  0.0d0               ! days&amp;lt;br /&amp;gt;  [[Variables#tide_start|TIDE_START]] =  0.0d0               ! days&amp;lt;br /&amp;gt;    [[Variables#time_ref|TIME_REF]] =  0.0d0               ! yyyymmdd.dd&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all the parameters are an exact integer multiple from each other:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefHIS|NDEFQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefAVG|NDEFAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#ndefDIA|NDEFDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ntimes|NTIMES]], [[Variables#nRST|NRST]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     MOD([[Variables#ndefHIS|NDEFHIS]], [[Variables#nHIS|NHIS]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefQCK|NDEFQCK]], [[Variables#nQCK|NQCK]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefAVH|NDEFAVG]], [[Variables#nAVG|NAVG]]) = 0 &amp;lt;br /&amp;gt;     MOD([[Variables#ndefDIA|NDEFDIA]], [[Variables#nHIS|NDIA]]) = 0 &amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the Fortran intrinsic function &#039;&#039;&#039;MOD(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;)&#039;&#039;&#039; computes the remainder of the division of &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt; by &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Y&amp;lt;/span&amp;gt;, and has to be always &#039;&#039;&#039;zero&#039;&#039;&#039; for ROMS multi-file option to work. Notice that the first files in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; data series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_his_0001.nc&amp;lt;/span&amp;gt;) will contain 5-time records because of the initial conditions, and the rest of the files will have 4-time records. Similarly, the first file in the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt; series (&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;roms_qck_0001.nc&amp;lt;/span&amp;gt;) will contain 9-time records, and the rest will have 8-time records. The time-averaged data in the averages and diagnostic files are single records files representing daily averaged fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WARNING:&amp;lt;/span&amp;gt; If running your application in a supercomputer with limited-time job queues, long simulations will require a restart. You cannot change the values of [[Variables#ntimes|NTIMES]] or [[Variables#dstart|DSTART]] because the multi-file will fail. Notice that the value [[Variables#nRST|NRST]] is crucial for all the restart of ROMS with multi-file. We need the following mathematical equalities:&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nHIS|NHIS]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nQCK|NQCK]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nAVG|NAVG]]) = 0&amp;lt;br /&amp;gt;     MOD([[Variables#nRST|NRST]], [[Variables#nDIA|NDIA]]) = 0&amp;lt;br /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Also, it will be trivial to restart if [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] = [[Variables#nRST|NRST]]. If doing balancing terms and budgets, you will need [[Variables#nAVG|NAVG]] = [[Variables#nDIA|NDIA]] too.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6553</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6553"/>
		<updated>2023-03-11T18:50:12Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Ouput Multi-Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Ouput Multi-Files==&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is advantageous to time-split ROMS output (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;averages&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;diagnostic&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt;, and &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;quicksave&amp;lt;/span&amp;gt;) into multiple NetCDF files to avoid creating huge files on disk for storage in applications with large grids. Smaller files are easy to handle and can be concatenated in OpenDAP catalogs.&lt;br /&gt;
&lt;br /&gt;
For example, an application for a particular area with a substantial grid size needs to be run for one year. The ROMS timestep is [[Variables#DT|DT]] = 300 seconds. Then, one could split the &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;history&amp;lt;/span&amp;gt; and quicksave data into daily NetCDF files with single or multiple time records every &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039;,  or &#039;&#039;&#039;24&#039;&#039;&#039; hours. In this case, ROMS will generate a sequence of files with suffixes &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0001.nc&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;_0365.nc&amp;lt;/span&amp;gt; filenames.  Therefore, we need the following parameters in [[roms.in|roms.in]]:&lt;br /&gt;
&lt;br /&gt;
* Timestepping parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;      [[Variables#ntimes|NTIMES]] =  105120        ! Number of timesteps &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(288 steps per day)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;          [[Variables#dt|DT]] == 300.0d0       ! Timestep size (seconds)&amp;lt;br /&amp;gt;     [[Variables#ndtfast|NDTFAST]] == 30            ! Number of barotropic steps&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Flags controlling the frequency of output.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;       [[Variables#nrrec|NRREC]] =  0             ! Model restart flag&amp;lt;br /&amp;gt;   [[Variables#LcycleRST|LcycleRST]] == T             ! Switch to recycle restart time records&amp;lt;br /&amp;gt;        [[Variables#nRST|NRST]] == 288           ! Number of timesteps between writing restart records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nSTA|NSTA]] == 1             ! Number of timesteps between stations records&amp;lt;br /&amp;gt;        [[Variables#nFLT|NFLT]] == 1             ! Number of timesteps between floats records&amp;lt;br /&amp;gt;       [[Variables#ninfo|NINFO]] == 1             ! Number of timesteps between printing information diagnostics&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Output history, average, and diagnostic file parameters.&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;     [[Variables#ldefout|LDEFOUT]] == T             ! File creation/append switch&amp;lt;br /&amp;gt;        [[Variables#nHIS|NHIS]] == 72            ! Number of timesteps between writing history records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 6 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefHIS|NDEFHIS]] == 288           ! Number of timesteps between the creation of new history files &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        [[Variables#nQCK|NQCK]] == 36            ! Number of timesteps between writing quicksave records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(every 3 hours)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefQCK|NDEFQCK]] == 288           ! Number of timesteps between the creation of new quicksave file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsAVG|NTSAVG]] == 1             ! Starting averages timestep&amp;lt;br /&amp;gt;        [[Variables#nAVG|NAVG]] == 288           ! Number of timesteps between writing averages records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefAVG|NDEFAVG]] == 288           ! Number of timesteps between the creation of new averages file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      [[Variables#ntsDIA|NTSDIA]] == 1             ! Starting diagnostics timestep&amp;lt;br /&amp;gt;        [[Variables#nDIA|NDIA]] == 288           ! Number of timesteps between writing diagnostics records &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily averages)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     [[Variables#ndefDIA|NDEFDIA]] == 288           ! Number of timesteps between the creation of new diagnostics file &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;(daily, single record files)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6552</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6552"/>
		<updated>2023-03-11T16:50:55Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;br /&gt;
&lt;br /&gt;
==Ouput Multi-Files==&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6551</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=IO&amp;diff=6551"/>
		<updated>2023-03-11T16:48:25Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS I/O&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROMS uses NetCDF for all its input and output data management. The NetCDF files can be processed using the standard library developed by [http://doi.org/10.5065/D6H70CW6 UNIDATA], the Parallel-IO (&#039;&#039;&#039;PIO&#039;&#039;&#039;) library developed at NCAR (Hartnett and Edwards, 2021; [https://www.researchgate.net/publication/348169990_THE_PARALLELIO_PIO_CFORTRAN_LIBRARIES_FOR_SCALABLE_HPC_PERFORMANCE unpublished paper]), or the Software for Cashing Output and Reads for Parallel I/O (&#039;&#039;&#039;SCORPIO&#039;&#039;&#039;) library intended for the DOE&#039;s Energy Exascale Earth Model System ([https://e3sm.org/scorpio-parallel-io-library/ E&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;SM]). Furthermore, another parallel I/O strategy has been available in ROMS for several years with the NetCDF4/HDF5 libraries by activating the [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library was forked from the &#039;&#039;&#039;PIO&#039;&#039;&#039; library several years ago and evolved separately. The generic interface for parallel I/O in ROMS works for both the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available by activating the [[Options#PIO_LIB|PIO_LIB]] CPP option.  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, we recommend using the &#039;&#039;&#039;PIO&#039;&#039;&#039; library because it is more efficient in processing I/O in our benchmark tests.&lt;br /&gt;
&lt;br /&gt;
Generally, writing is usually a more frequent and more complicated operation than reading. There are four strategies for writing (Mendez &#039;&#039;et al.&#039;&#039;, 2019; ​[https://www.researchgate.net/publication/332190037_Best_Practice_Guide_-_Parallel_IO Preprint]):&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, single writer:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Serial I/O&#039;&#039;&#039; in non-parallel or parallel applications. It is the default strategy in ROMS using the &#039;&#039;&#039;NetCDF3&#039;&#039;&#039; or &#039;&#039;&#039;NetCDF4&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with each partition tile writing its data to a single file. In ROMS, this capability is achieved by activating [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]]. It is only possible with the &#039;&#039;&#039;NetCDF4/HDF5&#039;&#039;&#039; libraries. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Single file, collective writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; with either one or a subset of processes performing I/O operations. The I/O operations can be &#039;&#039;&#039;synchronous&#039;&#039;&#039; or &#039;&#039;&#039;asynchronous&#039;&#039;&#039;. In ROMS, this capability uses the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries and available when [[Options#PIO_LIB|PIO_LIB]] is activated. &lt;br /&gt;
#&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Multiple files, multiple writers:&amp;lt;/span&amp;gt; &#039;&#039;&#039;Parallel I/O&#039;&#039;&#039; in which each distributed-memory or shared-memory tile decomposition writes its data into the partition file. Still, post-processing is required to pack the data into a single file. Currently, this capability is not available in ROMS but can be easily implemented within its current I/O infrastructure. However, this strategy is cumbersome and undesired in variational data assimilation (4D-Var) algorithms that require reading forwards and backward, in time, the state trajectories. As a consequence, reading becomes the bottleneck.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Serial I/O==&lt;br /&gt;
Serial I/O is the standard option that has been in ROMS since the beginning. In this setup, all input and output data flows through the master parallel process. All data for output is collected from all processes by the master process and written to disk. Likewise, all data for input is read by the master process and distributed to the rest of the processes. When using serial I/O, files can be written in NetCDF classic/64-bit offset (NetCDF-3) or NetCDF-4/HDF5 ([[Options#HDF5|HDF5]] CPP option) formats. File compression is available in the NetCDF-4/HDF5 library.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with NetCDF-4==&lt;br /&gt;
Parallel I/O using parallel HDF5 and NetCDF-4 has been available in ROMS for many years. This I/O option requires parallel enabled HDF5 and NetCDF-4 and is activated by defining [[Options#PARALLEL_IO|PARALLEL_IO]] and [[Options#HDF5|HDF5]] CPP options. Each parallel tile reads and writes the decomposed data. This approach does not scale well because it requires every process to participate in reading and writing, which quickly overloads the file system with requests as the number of tiles (NtileI x NtileJ) increases.&lt;br /&gt;
&lt;br /&gt;
==Parallel I/O with PIO or SCORPIO==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; libraries are primarily intended for ROMS &#039;&#039;&#039;distributed-memory (MPI) applications&#039;&#039;&#039; running on a large number of processes in an HPC system with a Parallel File System (like Lustre, GPFS, and so on) for high-performance I/O. The &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library uses the &#039;&#039;&#039;MPI-IO&#039;&#039;&#039; interface to facilitate the partitioning of the data across computational or dedicated I/O processes. For example, in an HPC cluster environment with a &#039;&#039;&#039;Parallel File System&#039;&#039;&#039;, the user can instruct &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; to designate which processes per node to perform I/O. This is a much more reasonable approach for larger applications running on hundreds of processors. To use this Parallel I/O strategy, the &#039;&#039;&#039;PIO&#039;&#039;&#039; or &#039;&#039;&#039;SCORPIO&#039;&#039;&#039; library must be linked to ROMS at compile time by defining the [[Options#PIO_LIB|PIO_LIB]] CPP option. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;It is only available in distributed-memory applications since it uses &#039;&#039;&#039;MPI-IO&#039;&#039;&#039;&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are two modes of parallel I/O in &#039;&#039;&#039;PIO&#039;&#039;&#039; and &#039;&#039;&#039;SCORPIO&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Synchronous:&#039;&#039;&#039; MPI intra-communications mode. A subset or all processes does I/O and also computations. The user specifies the total number of I/O tasks and how they are distributed across the HPC nodes as a function of the ROMS MPI-communicator object, &#039;&#039;&#039;OCN_COMM_WORLD&#039;&#039;&#039;. It is often desirable to shift the first I/O task away from the first computation task since it has higher memory requirements than other processes. If the MPI processes are spread over several computer nodes, it is highly recommended to spread all I/O tasks over all nodes. Avoid all I/O processes occupying the same node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;&#039;&#039;Asynchronous:&#039;&#039;&#039; MPI inter-communications mode. The I/O tasks are a disjointed set of dedicated I/O processes and do not perform computations. It is possible to have groups of computational units running separate models (coupling) where all the I/O data are sent to dedicated processes. In ROMS, the asynchronous mode is possible by activation either [[Options#ASYNCHRONOUS_PIO|ASYNCHRONOUS_PIO]] or [[Options#ASYNCHRONOUS_SCORPIO|ASYNCHRONOUS_SCORPIO]]. &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;However&amp;lt;/span&amp;gt;, this capability is still under development and not recommended for use at this time.&#039;&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Parallel I/O configuration options are set in [[roms.in]]:&lt;br /&gt;
{{#lst:roms.in|PIO}}&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=YAML_Parser&amp;diff=6547</id>
		<title>YAML Parser</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=YAML_Parser&amp;diff=6547"/>
		<updated>2023-03-08T15:50:05Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;YAML Parser&amp;lt;/div&amp;gt;&lt;br /&gt;
Starting with &#039;&#039;&#039;svn&#039;&#039;&#039; revision &#039;&#039;&#039;-r 1902&#039;&#039;&#039; released on March 1, 2022, the ROMS metadata is managed with a [[varinfo.yaml|YAML file]], and the regular text file &#039;&#039;&#039;varinfo.dat&#039;&#039;&#039; is deprecated. The &#039;&#039;&#039;YAML&#039;&#039;&#039; files are simple, easy to follow, elegant, portable, and expandable. ROMS can now process YAML files with its parser module, &#039;&#039;&#039;[https://www.myroms.org/doxygen/yaml__parser_8F_source.html yaml_parser.F]&#039;&#039;&#039;. Therefore, there is no need to use third-party &#039;&#039;&#039;YAML&#039;&#039;&#039; parsers.&lt;br /&gt;
&lt;br /&gt;
The ROMS &#039;&#039;&#039;YAML&#039;&#039;&#039; parser source code can be found in &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ROMS/Utility&amp;lt;/span&amp;gt;. It is written in Fortran 2003 and includes a &#039;&#039;&#039;CLASS&#039;&#039;&#039; of type &#039;&#039;&#039;yaml_tree&#039;&#039;&#039; for parsing input &#039;&#039;&#039;YAML&#039;&#039;&#039; files. You may download our YAML parser [https://www.myroms.org/links/yaml_parser.F here]. &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Although several &#039;&#039;&#039;YAML&#039;&#039;&#039; parsers for Fortran exist, a more straightforward and uncomplicated parser with substantial capabilities was coded in &#039;&#039;&#039;ROMS&#039;&#039;&#039;, &#039;&#039;&#039;[https://www.myroms.org/links/yaml_parser.F yaml_parser.F]&#039;&#039;&#039;. It is a hybrid between standard and Object-Oriented Programming (OOP) principles but without the need for recurrency, polymorphism, and containers (another library).&lt;br /&gt;
&lt;br /&gt;
The only constraint in the &#039;&#039;&#039;ROMS&#039;&#039;&#039; parser is that the &#039;&#039;&#039;YAML&#039;&#039;&#039; file is read &#039;&#039;&#039;twice&#039;&#039;&#039; for simplicity and to avoid containers. The container is a Fortran vector! The first read determines the indentation policy and the length of the collection vector, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;list(:)&amp;lt;/span&amp;gt; pairs object (derived-type structure &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;). The first reading is quick.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_alias&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! alias &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; token&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_anchor&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! anchor &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt; token&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_block&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! block &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_sequence&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sequence &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;[]&amp;lt;/span&amp;gt; tokens&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_logical&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_integer&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! integer value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_real&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! floating-point value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_string&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;id&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! key/value ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;parent_id&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! parent ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;left_padding&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! indent level: 0,1,..&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;line&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML line&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;key&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML keyword&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML value(s)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;anchor&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! anchor keyword&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;YAML&#039;&#039;&#039; file dictionary &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CLASS&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt; is defined as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsCreated&amp;lt;/span&amp;gt; &#039;&#039;&#039;= .FALSE.&#039;&#039;&#039; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML object creation switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nbranches&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! total number of branches&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Npairs&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! total number of pairs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;indent&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! blank indentation policy&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;filename&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML file name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;pointer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;list(:)&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! collection pairs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CONTAINS&amp;lt;/span&amp;gt;                                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! CLASS objects&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt;       =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_create&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;destroy&amp;lt;/span&amp;gt;      =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_destroy&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt;         =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_dump&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;extract&amp;lt;/span&amp;gt;      =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_extract&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fill&amp;lt;/span&amp;gt;         =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_fill&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fill_aliases&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_fill_aliases&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has&amp;lt;/span&amp;gt;          =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_has&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;read_line&amp;lt;/span&amp;gt;    =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_read_line&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt; object stores all the data contained in a specific &#039;&#039;&#039;YAML&#039;&#039;&#039; file. For Example, in &#039;&#039;&#039;ROMS&#039;&#039;&#039; the input &#039;&#039;&#039;YAML&#039;&#039;&#039; metadata dictionary is created and initialized as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_parser_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! verbose report switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processing error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! declare a dummy YAML object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;IF&amp;lt;/span&amp;gt; (.&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;not&amp;lt;/span&amp;gt;.&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self%IsCreated&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;THEN&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! process input YAML file&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;varinfo.yaml&#039;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END IF&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The error management is omitted for clarity. Then, the needed data is extracted from the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt; object and loaded into the internal &#039;&#039;&#039;ROMS&#039;&#039;&#039; variables using the overloaded &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; API:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;INTERFACE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_i_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets integer structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_l_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_r_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_s_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_ivar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets integer value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_ivar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gest integer values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_lvar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_lvar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_rvar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_rvar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_svar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_svar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END INTERFACE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Additionally, the &#039;&#039;&#039;YAML&#039;&#039;&#039; parser module has the following public and private routines/functions used during processing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_AssignString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Error&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_CountKeys&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_LowerCase&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_UpperCase&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_ValueType&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parser module is self-contained with minimal dependencies on other &#039;&#039;&#039;ROMS&#039;&#039;&#039; modules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_kinds&amp;lt;/span&amp;gt;,    &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;kind_real&amp;lt;/span&amp;gt;    =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! double-precision&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_parallel&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_Master&amp;lt;/span&amp;gt;  =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! master PET&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_scalars&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_ErrFlag&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;exit_flag&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_iounits&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_stdout&amp;lt;/span&amp;gt;  =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;stdout&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard ouput&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overall, the parser is very fast and works in parallel. All PETs are involved in their dictionary copy to avoid overhead from collective MPI calls.&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
Currently, the &#039;&#039;&#039;YAML&#039;&#039;&#039; parser supports the following features:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Single&#039;&#039;&#039; or &#039;&#039;&#039;multiple&#039;&#039;&#039; line comments start with a hash &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;#&amp;lt;/span&amp;gt;&#039;&#039;&#039;. Also, comment after a key/value pair is allowed. All comments are skipped during processing.&lt;br /&gt;
&lt;br /&gt;
*It has an &#039;&#039;&#039;unlimited nested structure&#039;&#039;&#039; (lists, mappings, hierarchies). Indentation of whitespace is used to denote structure.&lt;br /&gt;
&lt;br /&gt;
*It has an &#039;&#039;&#039;unrestricted schema indentation&#039;&#039;&#039;. However, some schema validators recommend or impose &#039;&#039;&#039;two whitespaces&#039;&#039;&#039; indentations.&lt;br /&gt;
&lt;br /&gt;
*A &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;colon&amp;lt;/span&amp;gt; follows a &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;key&amp;lt;/span&amp;gt; to denote a mapping &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; like:&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;ocean_model&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*It supports &amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;Anchors&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;salmon&amp;quot;&amp;gt;Aliases&amp;lt;/span&amp;gt;.&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;ATM_component&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;&amp;amp;ATM&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;WRF&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;metadata&amp;lt;/span&amp;gt;:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  - &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_eastward_wind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface eastward wind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Uwind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;uwind&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source_units&amp;lt;/span&amp;gt;:        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;m s-1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination_units&amp;lt;/span&amp;gt;:   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;m s-1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source_grid&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;cell_center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination_grid&amp;lt;/span&amp;gt;:    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;cell_center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;0.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;connected_to&amp;lt;/span&amp;gt;:        &amp;lt;span class=&amp;quot;salmon&amp;quot;&amp;gt;*ATM&amp;lt;/span&amp;gt;                                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;# u10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;regrid_method&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;bilinear&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;extrapolate_method&amp;lt;/span&amp;gt;:  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*It supports &#039;&#039;&#039;blocking lists&#039;&#039;&#039;: members are denoted by a leading &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;hyphen-and-space&amp;lt;/span&amp;gt;, which is considered part of the indentation. &lt;br /&gt;
&lt;br /&gt;
*It supports a &#039;&#039;&#039;flow sequence&#039;&#039;&#039;: a vector list with values enclosed in &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;square brackets&amp;lt;/span&amp;gt; and separated by a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;comma-and-space&amp;lt;/span&amp;gt;, like a &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keyword&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;val1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; ...&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;valN&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keyword&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;value(s)&amp;lt;/span&amp;gt; is (are) processed and stored as strings but converted to a logical, integer, floating-point, or derived-type when appropriate during extraction. If particular derived-type values are needed, the caller can process such a structure outside the parser. &lt;br /&gt;
&lt;br /&gt;
*It removes &#039;&#039;&#039;unwanted control characters&#039;&#039;&#039; like tabs and separators (&#039;&#039;&#039;ASCII&#039;&#039;&#039; character code &#039;&#039;&#039;0-31&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
*It is restricted to the &#039;&#039;&#039;English&#039;&#039;&#039; uppercase and lowercase alphabet but can be expanded to other characters (see &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_ValueType&amp;lt;/span&amp;gt; routine). &lt;br /&gt;
&lt;br /&gt;
*Multiple or continuation lines are supported. So, for example, we can have:&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;state variables&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_surface_height_anomaly&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;barotropic_sea_water_x_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;barotropic_sea_water_y_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_x_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_y_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_potential_temperature&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_practical_salinity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extraction==&lt;br /&gt;
&lt;br /&gt;
Several derived-type structures are declared to facilitate the extraction of similar data blocks compactly from the YAML dictionary (&#039;&#039;&#039;CLASS&#039;&#039;&#039; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;) in a compact way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Ivec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! integer structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Ivec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Lvec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Lvec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Rvec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! real structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;kind_real&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Rvec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! scalar value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;pointer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! recursive vector&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! values&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived-type structure below, extended/inherited from parent &amp;quot;yaml_Svec&amp;quot;, extracts hierarchies of keys and associated values from the &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary object. The calling program specifies a key string that may be generated by aggregating nested keys with a period. Also, it can extract flow sequence string element values that are separated by commas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;EXTENDS&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_extract&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_vector&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! true if loaded vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_extract&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These public structures can be used in applications to extract block list &#039;&#039;&#039;YAML&#039;&#039;&#039; constructs. The key may represent a &#039;&#039;&#039;sequence flow&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; with a vector of values. The values can be integers, logicals, reals, or strings.  For example, suppose that the &#039;&#039;&#039;YAML&#039;&#039;&#039; file has the following &#039;&#039;&#039;blocking list&#039;&#039;&#039; entries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_downward_heat_flux_in_sea_water&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface net heat flux&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shflux&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shf_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_wind_x_stress&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface zonal wind stress component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sustr&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;taux&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;atm_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_wind_y_stress&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface meridional wind stress component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;svstr&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;tauy&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;atm_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the code to extract the data from the &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;) is straightforward (see above for how to create and initialize a &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary object):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_parser_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processing error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(:)&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(:)&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! floating point data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(:)&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;short_name&#039;&amp;lt;/span&amp;gt;,     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;data_variables&#039;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;scale&#039;&amp;lt;/span&amp;gt;,          &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;debug write&#039;&amp;lt;/span&amp;gt;,    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L&amp;lt;/span&amp;gt;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that the internal adopted syntax is to aggregate the hierarchy of &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keys&amp;lt;/span&amp;gt; separated by a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dot&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;keystring&amp;lt;/span&amp;gt; (&#039;&#039;e.g.&#039;&#039;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;debug write&#039;&amp;lt;/span&amp;gt;) during the extraction call. The above extraction statement yields the following values from a single invocation of the overloaded function &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shflux&#039;&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;short_name&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;sustr&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(3)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;svstr&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(1)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shf&#039;&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(1)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shf_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(2)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;taux&#039;&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(2)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;atm_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(3)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;tauy&#039;&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(3)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;atm_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(1)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;scale&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(2)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(3)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(1)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;debug write&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(2)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(3)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS/Utility/get_metdata.F&amp;lt;/span&amp;gt; for more details on how the metadata is processed from input &#039;&#039;&#039;YAML&#039;&#039;&#039; files.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=NUOPC_Cap&amp;diff=6538</id>
		<title>NUOPC Cap</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=NUOPC_Cap&amp;diff=6538"/>
		<updated>2022-08-30T19:47:03Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS Native ESMF/NUOPC Cap&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This document describes the ROMS [[Model_Coupling_ESMF|ESMF/NUOPC]] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_roms.F&amp;lt;/span&amp;gt; used in the ROMS native coupling infrastructure shown below. In this case, ROMS is driving the coupled system (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_driver.h&amp;lt;/span&amp;gt;), which &#039;&#039;&#039;creates&#039;&#039;&#039;, &#039;&#039;&#039;register&#039;&#039;&#039;, &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039; the coupling of each Earth System Model (&#039;&#039;&#039;ESM&#039;&#039;&#039;) component (&#039;&#039;&#039;data&#039;&#039;&#039;, &#039;&#039;&#039;atmosphere&#039;&#039;&#039;, &#039;&#039;&#039;sea-ice&#039;&#039;&#039;, &#039;&#039;&#039;wave&#039;&#039;&#039;, and &#039;&#039;&#039;ocean&#039;&#039;&#039;). It also sets the coupler &#039;&#039;&#039;connectors&#039;&#039;&#039; and the &#039;&#039;&#039;RunSequence&#039;&#039;&#039; policy (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_esm.F&amp;lt;/span&amp;gt;). The framework provides the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; modules for each coupled component. Detailed information about &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; and how it is implemented in ROMS can be found on the [[Model_Coupling_ESMF|Earth System Modeling Framework]] WikiROMS page.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is a Fortran module that serves as the interface to a model when used in a &#039;&#039;&#039;NUOPC&#039;&#039;&#039;-based coupled system. The term &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is used because it is a lightweight software layer that sits on top of the model kernel, making calls to its &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039; phases and exposing the model data structures to the field exchange (&#039;&#039;&#039;import&#039;&#039;&#039; and &#039;&#039;&#039;export&#039;&#039;&#039; states) between coupled components.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ROMS_Coupling.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;Figure 1:&#039;&#039;&#039;&#039;&#039; ROMS native ESMF/NUOPC coupling infrastructure&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/mod_esmf_esm.F&amp;lt;/span&amp;gt; module declares several derived-type structures to facilitate the management of all internal objects and variables in each &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled component:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling time managing variables and &#039;&#039;&#039;ESMF&#039;&#039;&#039; objects. The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo&amp;lt;/span&amp;gt; object is allocated as &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;(0:Nmodels)&amp;lt;/span&amp;gt;, where &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt; is the number of coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; components. Here, index zero corresponds to the &#039;&#039;&#039;driver&#039;&#039;&#039;.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Restarted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i8b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AdvanceCount&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! advance counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Current_Time&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Reference&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Restart&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Start&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Stop&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Step&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CalendarString&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! 360_day, gregorian&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_ReferenceString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_RestartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StopString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Calendar&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Calendar&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Clock&amp;lt;/span&amp;gt;)          :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Direction_flag&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Direction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CurrentTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_TimeInterval&amp;lt;/span&amp;gt;)   :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;. . .&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled state sets. If appropriate, it includes the logic for connecting nested grids. The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;COUPLED&amp;lt;/span&amp;gt; object is of size &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LinkedGrid(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected grid&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DataCoupledSets(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA linked sets&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SetLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! set label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExpLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImpLabel(:)&amp;lt;/span&amp;gt; ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;import label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export set&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;COUPLED(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATA&#039;&#039;&#039; model field processing information. The &#039;&#039;&#039;DATA&#039;&#039;&#039; component is often necessary for applications with incongruent grids to provide complete field melding capabilities or methods for reading and interpolating stream data in space and time from archived NetCDF files.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lcycle&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cycling time coordinate&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lcoord&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coordinates attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lmask&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lmulti&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field across multi-files&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LastRec&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processed last record&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icomp&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! target component index&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncid&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! NetCDF file ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field variable ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nvdim&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number spatial dimensions&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Zlevel&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! level index to process&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nrec&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of time records&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Trec&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest read time record&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Masking land value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Masking sea value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vsize(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! dimensions size&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! add_offset attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;FillValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! _FillValue attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! scale_factor attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clength&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time cycling length&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LonMin&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid minimum longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LonMax&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid maximum longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LatMin&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid minimum latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LatMax&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid maximum latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tscale&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time scale to day&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmono&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! monotonic time (days)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vmin&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vmax&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (days)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Date(6,2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time-snapshots dates YYYY,MM,DD hh:mm:ss.ss&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=30), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Dname(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable dimensions names&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vcoord(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable coordinates names&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22 ) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! date-snapshots string&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=30 ) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SpecialAction&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! special processing&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tname&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tunits&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vname&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vunits&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vdescriptor&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Variable descriptive name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vlongname&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long_name attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncfile&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! NetCDF filename&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A2d(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time interpolated 2D data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A3d(:,:,:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time interpolated 3D data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A2dG(:,:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest 2D data snapsnots&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A3dG(:,:,:,:)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest 3D data snapsnots&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Field&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;field&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;)        :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATA&#039;&#039;&#039; model high-level structure. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nfields&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nfiles&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of input files&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ctarget(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component target&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Field(:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field short-name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Export(:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Export field structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;T_IO&amp;lt;/span&amp;gt;),       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IFS(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Input Files structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export field metadata information between the source (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;SRC&amp;lt;/span&amp;gt;) and destination (&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;DST&amp;lt;/span&amp;gt;) components. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;connected&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected to coupler&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! write exchanged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;enable_integral_adj&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! area integral adjusted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! internal field ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;etype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field extrapolation flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;itype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field interpolation flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ctarget&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component destination&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! date-snapshots string&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! short name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_vname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Vname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_tname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Tname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RegridMethod&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! regrid method&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExtrapMethod&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! extrapolate&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field scale factor&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field add offset value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (day)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields mesh data. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gid&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;area(:,:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid area&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Melding coefficients used to combine fields from &#039;&#039;&#039;DATA&#039;&#039;&#039; and &#039;&#039;&#039;ESM&#039;&#039;&#039; components. The weight factors are read from the input NetCDF specified in the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;WeightsFile(atmos)&amp;lt;/span&amp;gt; keyword. The user has  full control of how the merging is done. It is recommended to provide a gradual transition between the two components. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  Recall that the &#039;&#039;&#039;DATA&#039;&#039;&#039; component supplies needed data to a particular &#039;&#039;&#039;ESM&#039;&#039;&#039; component.  For example, it may export data to the atmosphere model at locations not covered by the other &#039;&#039;&#039;ESM&#039;&#039;&#039; components because of smaller grid coverage.  If the atmosphere and ocean model grids are incongruent, the atmosphere component needs to import sea surface temperature (SST) on those grid points not covered by the ocean component. Thus, the weighting coefficients are used to merge the SST data: &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_atm(:,:)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cesm(:,:)&amp;lt;/span&amp;gt; * &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_esm(:,:)&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; * &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_dat(:,:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;  where&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; Cesm(:,:)&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&amp;lt;br /&amp;gt;&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NestedGrid&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid needing merged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;VnameDATA&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA weights variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;VnameESM&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ESM  weights variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncfile&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Weights NetCDF filename&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coefficients for DATA&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cesm(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coefficients for ESM&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WEIGHTS(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WeightDAT&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.0_dp&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA component weight&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WeightESM&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0_dp&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ESM  component weight&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupled models high-level object, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels=5&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active for coupling&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sea  mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ngrids&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number nested grids&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number model PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeFrac(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! driver time fraction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mesh(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MODELS(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupling models connector used for the interpolation/extrapolaton between source and destination fields, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active connector&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;divDT&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MaskInteraction&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector mask interaction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of connector PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONNECTORS(:,:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Define &#039;&#039;&#039;DATA&#039;&#039;&#039; Model field processing information from input data files, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. Currently, the &#039;&#039;&#039;DATA&#039;&#039;&#039; Model only export fields and it only supports input NetCDF files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DataSet(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;ESM&#039;&#039;&#039; clock for driver (zeroth element) and coupled components, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;Internal module parameters and variables:&#039;&#039;&#039;&amp;lt;br /&amp;gt; &lt;br /&gt;
** Number of coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; gridded components. Currently, five &#039;&#039;&#039;ESM&#039;&#039;&#039; components are supported (&#039;&#039;&#039;ROMS&#039;&#039;&#039;, &#039;&#039;&#039;DATA&#039;&#039;&#039;, &#039;&#039;&#039;ATMOSPHERE&#039;&#039;&#039;, &#039;&#039;&#039;SEA-ICE&#039;&#039;&#039;, and &#039;&#039;&#039;WAVE&#039;&#039;&#039; model types).  &amp;lt;br /&amp;gt; All supported components are accounted here even if we are running an application with less number of models. The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt; switches are use to operate only on the desired coupled components. This is done to have complete infornation in the above structures. The gridded arrays are never allocated if a particular component is not active. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of nested grids.  All are initialized to just one grid; its values are overwritten during processing. An additional variable &#039;&#039;&#039;NgridsR&#039;&#039;&#039; is created to avoid using ROMS module &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_param&amp;lt;/span&amp;gt; in the generic interface.  Both &#039;&#039;&#039;Ngrids&#039;&#039;&#039; and &#039;&#039;&#039;NgridsR&#039;&#039;&#039; will have the same value.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsA&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Atmosphere Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsD&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsI&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Sea-ice Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsR&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ROMS&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsW&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Wave Model&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; components identification indices.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idriver&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iatmos&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idata&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iseaice&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iwave&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Generic &#039;&#039;&#039;ESM&#039;&#039;&#039; component labels used in the &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CASE&amp;lt;/span&amp;gt; constructs.  We cannot use the identification indices because the vector &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms(:)&amp;lt;/span&amp;gt; cannot be defined as a parameter and a non constant expression is illegal: &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CASE&amp;lt;/span&amp;gt; ( &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsR&amp;lt;/span&amp;gt;) )&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 3), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clabel(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len=&amp;lt;/span&amp;gt;10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cmodel(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of ROMS export and import fields per component. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nexport(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nimport(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Model coupling type: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] Explicit, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;otherwise&amp;lt;/span&amp;gt;] Semi-Implicit. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;explicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined using known values from the time-step before it. Explicit methods require less computational effort and are accurate for small coupling time-steps. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;implicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined by including values at the next time-step. Implicit methods are stable and allow longer coupling time-steps but are more computationally expensive. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;semi-implicit coupling&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS -&amp;gt; ATM&#039;&#039;&#039; is explicit, &#039;&#039;&#039;ATM -&amp;gt; ROMS&#039;&#039;&#039; is implicit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplingType&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Distributed-memory communicator handle for each component, Total number of PETs needed in concurrent PET layout, rank of each PET, and PET layout (sequential or concurrent). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMcomm(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;sumPETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETrank&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=10) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlayoutOption&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Driver clock parameters specified in configuration script. A integer vector with six elements: (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) year including century, like 2017; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;) month of the year, 1 to 12; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;) day of the month; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;) hour of the day, 0 to 23; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;) minutes of the hour, 0 to 59; and (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;) seconds of the minute, 0 to 59 &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceDate&amp;lt;/span&amp;gt;(6)          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! reference date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartDate&amp;lt;/span&amp;gt;(6)            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! restarting date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartDate&amp;lt;/span&amp;gt;(6)              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! starting date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopDate&amp;lt;/span&amp;gt;(6)               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! stopping date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;(6)               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling interval&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Today date string. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=44) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TodayDateString&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling simulation reference date number, element: (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) seconds, and (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;) fractional days&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceDateNumber&amp;lt;/span&amp;gt;(2)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;DATA&#039;&#039;&#039; component parallel distributed-memory domain partions in the &#039;&#039;&#039;I&#039;&#039;&#039;- and &#039;&#039;&#039;J&#039;&#039;&#039;-directions (lon,lat).  &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ItileD&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;JtileD&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling debugging flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no debugging, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports informative messages, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;1&#039;&amp;lt;/span&amp;gt; plus writes grid information in &#039;&#039;&#039;VTK&#039;&#039;&#039; format,  [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;2&#039;&amp;lt;/span&amp;gt; plus writes exchage fields into &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DebugLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Execution tracing level flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no tracing, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports sequence of coupling subroutine calls, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;gt; plus writes voluminous &#039;&#039;&#039;ESMF&#039;&#039;&#039; library tracing information which slowdown performace, and creates large log file. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TraceLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Switch to trace/track run sequence during debugging.  All information is written to Fortan unit &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt;. For now, use standard output unit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESM_track&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence unit&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled model staggered grid-cell type indices. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inan&amp;lt;/span&amp;gt;    = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! unstaggered, cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icenter&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icorner&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell corners&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iupoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! right and left cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ivpoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper and lower cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=6), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;GridType&amp;lt;/span&amp;gt; =                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;N/A&amp;lt;/span&amp;gt;   &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Corner&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;U&amp;lt;/span&amp;gt;     &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;V&amp;lt;/span&amp;gt;     &#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;REGRID&#039;&#039;&#039; interpolation method between source and destination fields. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inone&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! none&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ibilin&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! bilinear&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ipatch&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! high-order patch recovery&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iconsv1&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! first-order conservative&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iconsv2&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! second-order conservative&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;InStoD&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearest neighbor Src to Dst&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;InDtoS&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearest neighbor Dst to Src&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=4), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:6) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IntrpType&amp;lt;/span&amp;gt; =                  &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NONE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;BLIN&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PTCH&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CNS1&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CNS2&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NS2D&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ND2S&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
** Extrapolation method for unmapped destination points. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Enone&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! none&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExStoD&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearear neighbor Src to Dst&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Eidavg&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! inverse distance average&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ecreep&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! creep fill&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;E2steps&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Turuncoglu two steps&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=4), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExtrpType&amp;lt;/span&amp;gt; =                  &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NONE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NS2D&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IDAV&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CREE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2STP&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  The number of levels to output for the extrapolation methods that fill levels, like creep fill (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMF_EXTRAPMETHOD_CREEP&amp;lt;/span&amp;gt;). Unmapped destination points are supplied by repeatedly moving data from mapped locations to neighboring unmapped locations for a user-specified number of levels.  For each creeped point, its value is the average of the values of the immediate neighbors from the mapped points from regridding (&#039;&#039;&#039;ESMF&#039;&#039;&#039; Reference Manual, v &#039;&#039;&#039;8.0.0&#039;&#039;&#039;). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;extrapNumLevels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Interpolation connectors mask interaction flags. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverLand&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverOcean&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverAll&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=3), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(3) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MaskType&amp;lt;/span&amp;gt; =                     &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                   (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LND&amp;lt;/span&amp;gt;&#039;,                      &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OCN&amp;lt;/span&amp;gt;&#039;,                      &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ALL&amp;lt;/span&amp;gt;&#039;/)&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling run mode: sequential or concurrent. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iseq&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ipar&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (len=10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(2) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RunMode&amp;lt;/span&amp;gt; =                     &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                   (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SEQUENTIA&amp;lt;/span&amp;gt;L&#039;,               &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONCURRENT&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Compling standard input parameters filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CinpName&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;ESM&#039;&#039;&#039; free-format run sequence configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONFname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** ROMS coupling &#039;&#039;&#039;YAML&#039;&#039;&#039; configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CPLname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Standard input filename for each coupled model, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;INPname(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Standard output units and log messages filename for coupler and &#039;&#039;&#039;ESMF&#039;&#039;&#039; library. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cplout&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling driver&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dataout&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! data component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 8), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMnameLog&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;log.esmf&amp;lt;/span&amp;gt;&#039;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 8), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplerLog&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;log.coupler&amp;lt;/span&amp;gt;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Output &#039;&#039;&#039;NetCDF&#039;&#039;&#039; file used to store field snapshot attributes needed for time interpolation by the &#039;&#039;&#039;ESM&#039;&#039;&#039; component kernel during concurrent coupling. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=17), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AttFileName&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;time_intrp_att.nc&amp;lt;/span&amp;gt;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; single and double precision constants. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;99_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;UNMAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;98_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r8&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module contains a set of subroutines that are required by &#039;&#039;&#039;NUOPC&#039;&#039;&#039;. According to a predefined calling sequence, these subroutines are called by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; infrastructure. Some subroutines are called during the initialization of the coupled system, some during the run of the coupled system, and some during the finalization of the coupled system.&lt;br /&gt;
&lt;br /&gt;
The initialization sequence is the most complex and is governed by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; technical rules. Details about the initialization sequence can be found in the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; Reference Manual. The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; requires &#039;&#039;&#039;ESMF version 8 or higher&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=&amp;quot;1000&amp;quot;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetServices&amp;lt;/span&amp;gt; &lt;br /&gt;
|Entry point to the ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; and the only &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; routine. It sets the ROMS component chared-object entry points for using &#039;&#039;&#039;NUOPC&#039;&#039;&#039; generic methods for &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 1 initialization which sets import and export fields long and short names into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP2&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 2 initialization which initializes the ROMS component (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_initialize&amp;lt;/span&amp;gt;), sets component grid (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;), and adds fields into import and export into respective states.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_DataInit&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS component fields during initialization or restart.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component date calendar, start and stop times, and coupling interval.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetRunClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS run clock manually to avoid getting zero time stamps at the first regridding call.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_CheckImport&amp;lt;/span&amp;gt;&lt;br /&gt;
|Checks if ROMS component import field is at the correct time.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component staggered, horizontal grid arrays, grid area, and land/sea mask if any.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetStates&amp;lt;/span&amp;gt;&lt;br /&gt;
|Adds ROMS component &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_ModelAdvance&amp;lt;/span&amp;gt;&lt;br /&gt;
|Advances ROMS component for a coupling interval. It calls &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt; routines.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetFinalize&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finalizes ROMS component execution.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt;&lt;br /&gt;
|Loads import fields into ROMS internal kernel arrays.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS fields to other gridded components.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Rotate&amp;lt;/span&amp;gt;&lt;br /&gt;
|Rotates vector components from computational grid to geographical &#039;&#039;&#039;EAST&#039;&#039;&#039; and &#039;&#039;&#039;NORTH&#039;&#039;&#039; directions or vice versa.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NUOPC&amp;lt;/span&amp;gt; cap modules are available within the ROMS native framework:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;ESMF/NUOPC Modules&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Tested&#039;&#039;&#039;&lt;br /&gt;
|style=&amp;quot;width: 700px;&amp;quot; align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_driver.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; Master Driver&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_esm.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Sets &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; &#039;&#039;&#039;Services&#039;&#039;&#039; and &#039;&#039;&#039;RunSequence&#039;&#039;&#039; for each coupled component&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_coupler.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;Computes&#039;&#039;&#039;, &#039;&#039;&#039;Execute&#039;&#039;&#039;, and &#039;&#039;&#039;Release&#039;&#039;&#039; the &#039;&#039;&#039;Connectors&#039;&#039;&#039; between &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination&amp;lt;/span&amp;gt; fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/mod_esmf_esm.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines framework object &#039;&#039;&#039;structures&#039;&#039;&#039; and &#039;&#039;&#039;variables&#039;&#039;&#039; and includes support routines&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_coamps.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Coupled Ocean-Atmosphere Mesoscale Prediction System (&#039;&#039;&#039;COAMPS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_coamps.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Coupled Ocean-Atmosphere Mesoscale Prediction System (&#039;&#039;&#039;COAMPS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_regcm.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| ICTP Regional Climate Model (&#039;&#039;&#039;RegCM&#039;&#039;&#039;, Version &#039;&#039;&#039;4.5&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_wrf.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Weather Research and Forecasting model (&#039;&#039;&#039;WRF&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_data.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generic &#039;&#039;&#039;DATA&#039;&#039;&#039; component via &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_ice_cice.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| Los Alamos Sea Ice Model (&#039;&#039;&#039;CICE&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_roms.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Regional Ocean Modeling System (&#039;&#039;&#039;ROMS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_wav_wam.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| ECMWF&#039;s Wave Model (&#039;&#039;&#039;WAM&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_wav_ww3.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| WaveWatch III (&#039;&#039;&#039;WW3&#039;&#039;&#039;), &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;under development&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Import and Export Fields==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields are configured and specified in the &#039;&#039;&#039;YAML&#039;&#039;&#039; file [[coupling_esmf_atm.yaml]]. Check the following [[coupling_esmf_atm.yaml|wikiROMS]] page for detailed information.  The user has full control of the coupling exchange fields metadata.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; library version &#039;&#039;&#039;8.0.0&#039;&#039;&#039; or higher supports native nesting capabilities.  The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; layer now allows coupling sets in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; states of the &#039;&#039;&#039;ESM&#039;&#039;&#039; components. A nested grid is represented as another &#039;&#039;&#039;ESMF_Grid&#039;&#039;&#039; object so that a coupled model can have a set of telescoping meshes of decreasing spatial resolution. The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; connector can recognize the different grids and exchange fields to a connected &#039;&#039;&#039;ESM&#039;&#039;&#039; component. Various types of connections are possible, like nest-to-nest, fine-to-coarse, or coarse-to-fine. The user decides which nested grids to connect. The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;NUOPC_AddNestedState&amp;lt;/span&amp;gt; routine is used to advertise the nested couple sets.&lt;br /&gt;
&lt;br /&gt;
For example, the ROMS &#039;&#039;&#039;NOUPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module routine &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt; illustrates how easily the coupled sets is added to the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState&amp;lt;/span&amp;gt; as shown below in the green blocks of code. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:ImportCoupledStates.png]]&lt;br /&gt;
|[[Image:ExportCoupledStates.png]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=YAML_Parser&amp;diff=6537</id>
		<title>YAML Parser</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=YAML_Parser&amp;diff=6537"/>
		<updated>2022-08-30T19:00:19Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;YAML Parser&amp;lt;/div&amp;gt;&lt;br /&gt;
Starting with &#039;&#039;&#039;svn&#039;&#039;&#039; revision &#039;&#039;&#039;-r 1902&#039;&#039;&#039; released on March 1, 2022, the ROMS metadata is managed with a [[varinfo.yaml|YAML file]], and the regular text file &#039;&#039;&#039;varinfo.dat&#039;&#039;&#039; is deprecated. The &#039;&#039;&#039;YAML&#039;&#039;&#039; files are simple, easy to follow, elegant, portable, and expandable. ROMS can now process YAML files with its parser module, &#039;&#039;&#039;[https://www.myroms.org/links/yaml_parser.F yaml_parser.F]&#039;&#039;&#039;. Therefore, there is no need to use third-party &#039;&#039;&#039;YAML&#039;&#039;&#039; parsers.&lt;br /&gt;
&lt;br /&gt;
The ROMS &#039;&#039;&#039;YAML&#039;&#039;&#039; parser source code can be found in &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ROMS/Utility&amp;lt;/span&amp;gt;. It is written in Fortran 2003 and includes a &#039;&#039;&#039;CLASS&#039;&#039;&#039; of type &#039;&#039;&#039;yaml_tree&#039;&#039;&#039; for parsing input &#039;&#039;&#039;YAML&#039;&#039;&#039; files.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Although several &#039;&#039;&#039;YAML&#039;&#039;&#039; parsers for Fortran exist, a more straightforward and uncomplicated parser with substantial capabilities was coded in &#039;&#039;&#039;ROMS&#039;&#039;&#039;, &#039;&#039;&#039;[https://www.myroms.org/links/yaml_parser.F yaml_parser.F]&#039;&#039;&#039;. It is a hybrid between standard and Object-Oriented Programming (OOP) principles but without the need for recurrency, polymorphism, and containers (another library).&lt;br /&gt;
&lt;br /&gt;
The only constraint in the &#039;&#039;&#039;ROMS&#039;&#039;&#039; parser is that the &#039;&#039;&#039;YAML&#039;&#039;&#039; file is read &#039;&#039;&#039;twice&#039;&#039;&#039; for simplicity and to avoid containers. The container is a Fortran vector! The first read determines the indentation policy and the length of the collection vector, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;list(:)&amp;lt;/span&amp;gt; pairs object (derived-type structure &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;). The first reading is quick.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_alias&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! alias &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; token&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_anchor&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! anchor &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt; token&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_block&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! block &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_sequence&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sequence &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;[]&amp;lt;/span&amp;gt; tokens&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_logical&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_integer&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! integer value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_real&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! floating-point value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_string&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;id&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! key/value ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;parent_id&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! parent ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;left_padding&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! indent level: 0,1,..&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;line&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML line&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;key&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML keyword&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML value(s)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;anchor&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! anchor keyword&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;YAML&#039;&#039;&#039; file dictionary &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CLASS&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt; is defined as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsCreated&amp;lt;/span&amp;gt; &#039;&#039;&#039;= .FALSE.&#039;&#039;&#039; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML object creation switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nbranches&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! total number of branches&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Npairs&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! total number of pairs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;indent&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! blank indentation policy&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;filename&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML file name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;pointer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;list(:)&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! collection pairs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CONTAINS&amp;lt;/span&amp;gt;                                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! CLASS objects&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt;       =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_create&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;destroy&amp;lt;/span&amp;gt;      =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_destroy&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt;         =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_dump&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;extract&amp;lt;/span&amp;gt;      =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_extract&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fill&amp;lt;/span&amp;gt;         =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_fill&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fill_aliases&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_fill_aliases&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has&amp;lt;/span&amp;gt;          =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_has&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;read_line&amp;lt;/span&amp;gt;    =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_read_line&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt; object stores all the data contained in a specific &#039;&#039;&#039;YAML&#039;&#039;&#039; file. For Example, in &#039;&#039;&#039;ROMS&#039;&#039;&#039; the input &#039;&#039;&#039;YAML&#039;&#039;&#039; metadata dictionary is created and initialized as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_parser_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! verbose report switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processing error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! declare a dummy YAML object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;IF&amp;lt;/span&amp;gt; (.&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;not&amp;lt;/span&amp;gt;.&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self%IsCreated&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;THEN&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! process input YAML file&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;varinfo.yaml&#039;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END IF&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The error management is omitted for clarity. Then, the needed data is extracted from the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt; object and loaded into the internal &#039;&#039;&#039;ROMS&#039;&#039;&#039; variables using the overloaded &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; API:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;INTERFACE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_i_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets integer structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_l_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_r_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_s_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_ivar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets integer value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_ivar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gest integer values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_lvar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_lvar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_rvar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_rvar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_svar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_svar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END INTERFACE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Additionally, the &#039;&#039;&#039;YAML&#039;&#039;&#039; parser module has the following public and private routines/functions used during processing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_AssignString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Error&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_CountKeys&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_LowerCase&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_UpperCase&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_ValueType&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parser module is self-contained with minimal dependencies on other &#039;&#039;&#039;ROMS&#039;&#039;&#039; modules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_kinds&amp;lt;/span&amp;gt;,    &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;kind_real&amp;lt;/span&amp;gt;    =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! double-precision&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_parallel&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_Master&amp;lt;/span&amp;gt;  =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! master PET&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_scalars&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_ErrFlag&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;exit_flag&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_iounits&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_stdout&amp;lt;/span&amp;gt;  =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;stdout&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard ouput&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overall, the parser is very fast and works in parallel. All PETs are involved in their dictionary copy to avoid overhead from collective MPI calls.&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
Currently, the &#039;&#039;&#039;YAML&#039;&#039;&#039; parser supports the following features:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Single&#039;&#039;&#039; or &#039;&#039;&#039;multiple&#039;&#039;&#039; line comments start with a hash &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;#&amp;lt;/span&amp;gt;&#039;&#039;&#039;. Also, comment after a key/value pair is allowed. All comments are skipped during processing.&lt;br /&gt;
&lt;br /&gt;
*It has an &#039;&#039;&#039;unlimited nested structure&#039;&#039;&#039; (lists, mappings, hierarchies). Indentation of whitespace is used to denote structure.&lt;br /&gt;
&lt;br /&gt;
*It has an &#039;&#039;&#039;unrestricted schema indentation&#039;&#039;&#039;. However, some schema validators recommend or impose &#039;&#039;&#039;two whitespaces&#039;&#039;&#039; indentations.&lt;br /&gt;
&lt;br /&gt;
*A &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;colon&amp;lt;/span&amp;gt; follows a &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;key&amp;lt;/span&amp;gt; to denote a mapping &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; like:&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;ocean_model&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*It supports &amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;Anchors&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;salmon&amp;quot;&amp;gt;Aliases&amp;lt;/span&amp;gt;.&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;ATM_component&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;&amp;amp;ATM&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;WRF&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;metadata&amp;lt;/span&amp;gt;:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  - &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_eastward_wind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface eastward wind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Uwind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;uwind&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source_units&amp;lt;/span&amp;gt;:        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;m s-1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination_units&amp;lt;/span&amp;gt;:   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;m s-1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source_grid&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;cell_center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination_grid&amp;lt;/span&amp;gt;:    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;cell_center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;0.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;connected_to&amp;lt;/span&amp;gt;:        &amp;lt;span class=&amp;quot;salmon&amp;quot;&amp;gt;*ATM&amp;lt;/span&amp;gt;                                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;# u10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;regrid_method&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;bilinear&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;extrapolate_method&amp;lt;/span&amp;gt;:  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*It supports &#039;&#039;&#039;blocking lists&#039;&#039;&#039;: members are denoted by a leading &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;hyphen-and-space&amp;lt;/span&amp;gt;, which is considered part of the indentation. &lt;br /&gt;
&lt;br /&gt;
*It supports a &#039;&#039;&#039;flow sequence&#039;&#039;&#039;: a vector list with values enclosed in &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;square brackets&amp;lt;/span&amp;gt; and separated by a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;comma-and-space&amp;lt;/span&amp;gt;, like a &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keyword&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;val1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; ...&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;valN&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keyword&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;value(s)&amp;lt;/span&amp;gt; is (are) processed and stored as strings but converted to a logical, integer, floating-point, or derived-type when appropriate during extraction. If particular derived-type values are needed, the caller can process such a structure outside the parser. &lt;br /&gt;
&lt;br /&gt;
*It removes &#039;&#039;&#039;unwanted control characters&#039;&#039;&#039; like tabs and separators (&#039;&#039;&#039;ASCII&#039;&#039;&#039; character code &#039;&#039;&#039;0-31&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
*It is restricted to the &#039;&#039;&#039;English&#039;&#039;&#039; uppercase and lowercase alphabet but can be expanded to other characters (see &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_ValueType&amp;lt;/span&amp;gt; routine). &lt;br /&gt;
&lt;br /&gt;
*Multiple or continuation lines are supported. So, for example, we can have:&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;state variables&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_surface_height_anomaly&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;barotropic_sea_water_x_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;barotropic_sea_water_y_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_x_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_y_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_potential_temperature&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_practical_salinity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extraction==&lt;br /&gt;
&lt;br /&gt;
Several derived-type structures are declared to facilitate the extraction of similar data blocks compactly from the YAML dictionary (&#039;&#039;&#039;CLASS&#039;&#039;&#039; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;) in a compact way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Ivec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! integer structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Ivec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Lvec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Lvec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Rvec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! real structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;kind_real&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Rvec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! scalar value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;pointer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! recursive vector&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! values&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived-type structure below, extended/inherited from parent &amp;quot;yaml_Svec&amp;quot;, extracts hierarchies of keys and associated values from the &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary object. The calling program specifies a key string that may be generated by aggregating nested keys with a period. Also, it can extract flow sequence string element values that are separated by commas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;EXTENDS&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_extract&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_vector&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! true if loaded vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_extract&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These public structures can be used in applications to extract block list &#039;&#039;&#039;YAML&#039;&#039;&#039; constructs. The key may represent a &#039;&#039;&#039;sequence flow&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; with a vector of values. The values can be integers, logicals, reals, or strings.  For example, suppose that the &#039;&#039;&#039;YAML&#039;&#039;&#039; file has the following &#039;&#039;&#039;blocking list&#039;&#039;&#039; entries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_downward_heat_flux_in_sea_water&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface net heat flux&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shflux&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shf_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_wind_x_stress&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface zonal wind stress component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sustr&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;taux&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;atm_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_wind_y_stress&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface meridional wind stress component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;svstr&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;tauy&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;atm_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the code to extract the data from the &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;) is straightforward (see above for how to create and initialize a &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary object):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_parser_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processing error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(:)&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(:)&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! floating point data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(:)&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;short_name&#039;&amp;lt;/span&amp;gt;,     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;data_variables&#039;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;scale&#039;&amp;lt;/span&amp;gt;,          &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;debug write&#039;&amp;lt;/span&amp;gt;,    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L&amp;lt;/span&amp;gt;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that the internal adopted syntax is to aggregate the hierarchy of &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keys&amp;lt;/span&amp;gt; separated by a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dot&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;keystring&amp;lt;/span&amp;gt; (&#039;&#039;e.g.&#039;&#039;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;debug write&#039;&amp;lt;/span&amp;gt;) during the extraction call. The above extraction statement yields the following values from a single invocation of the overloaded function &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shflux&#039;&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;short_name&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;sustr&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(3)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;svstr&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(1)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shf&#039;&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(1)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shf_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(2)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;taux&#039;&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(2)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;atm_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(3)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;tauy&#039;&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(3)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;atm_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(1)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;scale&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(2)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(3)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(1)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;debug write&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(2)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(3)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS/Utility/get_metdata.F&amp;lt;/span&amp;gt; for more details on how the metadata is processed from input &#039;&#039;&#039;YAML&#039;&#039;&#039; files.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=YAML_Parser&amp;diff=6536</id>
		<title>YAML Parser</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=YAML_Parser&amp;diff=6536"/>
		<updated>2022-08-30T18:50:45Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;YAML Parser&amp;lt;/div&amp;gt;&lt;br /&gt;
Starting with &#039;&#039;&#039;svn&#039;&#039;&#039; revision &#039;&#039;&#039;-r 1902&#039;&#039;&#039; released on March 1, 2022, the ROMS metadata is managed with a [[varinfo.yaml|YAML file]], and the regular text file &#039;&#039;&#039;varinfo.dat&#039;&#039;&#039; is deprecated. The &#039;&#039;&#039;YAML&#039;&#039;&#039; files are simple, easy to follow, elegant, portable, and expandable. ROMS can now process YAML files with its parser module, &#039;&#039;&#039;[https://www.myroms.org/links/yaml_parser.F yaml_parser.F]&#039;&#039;&#039;. Therefore, there is no need to use third-party &#039;&#039;&#039;YAML&#039;&#039;&#039; parsers.&lt;br /&gt;
&lt;br /&gt;
The ROMS &#039;&#039;&#039;YAML&#039;&#039;&#039; parser source code can be found in &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ROMS/Utility&amp;lt;/span&amp;gt;. It is written in Fortran 2003 and includes a &#039;&#039;&#039;CLASS&#039;&#039;&#039; of type &#039;&#039;&#039;yaml_tree&#039;&#039;&#039; for parsing input &#039;&#039;&#039;YAML&#039;&#039;&#039; files.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Although several &#039;&#039;&#039;YAML&#039;&#039;&#039; parsers for Fortran exist, a more straightforward and uncomplicated parser with substantial capabilities was coded in &#039;&#039;&#039;ROMS&#039;&#039;&#039;, &#039;&#039;&#039;[https://www.myroms.org/links/yaml_parser.F yaml_parser.F]&#039;&#039;&#039;. It is a hybrid between standard and Object-Oriented Programming (OOP) principles but without the need for recurrency, polymorphism, and containers (another library).&lt;br /&gt;
&lt;br /&gt;
The only constraint in the &#039;&#039;&#039;ROMS&#039;&#039;&#039; parser is that the &#039;&#039;&#039;YAML&#039;&#039;&#039; file is read &#039;&#039;&#039;twice&#039;&#039;&#039; for simplicity and to avoid containers. The container is a Fortran vector! The first read determines the indentation policy and the length of the collection vector, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;list(:)&amp;lt;/span&amp;gt; pairs object (derived-type structure &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;). The first reading is quick.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_alias&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! alias &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; token&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_anchor&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! anchor &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt; token&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_block&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! block &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_sequence&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sequence &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;[]&amp;lt;/span&amp;gt; tokens&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_logical&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_integer&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! integer value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_real&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! floating-point value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;is_string&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;id&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! key/value ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;parent_id&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! parent ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;left_padding&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! indent level: 0,1,..&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;line&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML line&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;key&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML keyword&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML value(s)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;anchor&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! anchor keyword&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;YAML&#039;&#039;&#039; file dictionary &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CLASS&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt; is defined as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsCreated&amp;lt;/span&amp;gt; &#039;&#039;&#039;= .FALSE.&#039;&#039;&#039; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML object creation switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nbranches&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! total number of branches&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Npairs&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! total number of pairs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;indent&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! blank indentation policy&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;filename&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! YAML file name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_pair&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;pointer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;list(:)&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! collection pairs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CONTAINS&amp;lt;/span&amp;gt;                                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! CLASS objects&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;create&amp;lt;/span&amp;gt;       =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_create&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;destroy&amp;lt;/span&amp;gt;      =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_destroy&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dump&amp;lt;/span&amp;gt;         =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_dump&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;extract&amp;lt;/span&amp;gt;      =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_extract&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fill&amp;lt;/span&amp;gt;         =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_fill&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fill_aliases&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_fill_aliases&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has&amp;lt;/span&amp;gt;          =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_has&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PROCEDURE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;read_line&amp;lt;/span&amp;gt;    =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_tree_read_line&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt; object stores all the data contained in a specific &#039;&#039;&#039;YAML&#039;&#039;&#039; file. For Example, in &#039;&#039;&#039;ROMS&#039;&#039;&#039; the input &#039;&#039;&#039;YAML&#039;&#039;&#039; metadata dictionary is created and initialized as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_parser_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! verbose report switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processing error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! declare a dummy YAML object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;IF&amp;lt;/span&amp;gt; (.&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;not&amp;lt;/span&amp;gt;.&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ASSOCIATED&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self%list&amp;lt;/span&amp;gt;)) &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;THEN&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! process input YAML file&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;varinfo.yaml&#039;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lreport&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END IF&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
The error management is omitted for clarity. Then, the needed data is extracted from the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt; object and loaded into the internal &#039;&#039;&#039;ROMS&#039;&#039;&#039; variables using the overloaded &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; API:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;INTERFACE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_i_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets integer structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_l_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_r_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_s_struc&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_ivar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets integer value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_ivar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gest integer values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_lvar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_lvar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets logical values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_rvar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_rvar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets real    values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_svar_0d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE PROCEDURE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Get_svar_1d&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Gets string  values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END INTERFACE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Additionally, the &#039;&#039;&#039;YAML&#039;&#039;&#039; parser module has the following public and private routines/functions used during processing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_AssignString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_Error&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt;  :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_initialize&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_CountKeys&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_LowerCase&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_UpperCase&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_ValueType&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parser module is self-contained with minimal dependencies on other &#039;&#039;&#039;ROMS&#039;&#039;&#039; modules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_kinds&amp;lt;/span&amp;gt;,    &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;kind_real&amp;lt;/span&amp;gt;    =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! double-precision&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_parallel&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_Master&amp;lt;/span&amp;gt;  =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! master PET&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_scalars&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_ErrFlag&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;exit_flag&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_iounits&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;yaml_stdout&amp;lt;/span&amp;gt;  =&amp;gt; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;stdout&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard ouput&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overall, the parser is very fast and works in parallel. All PETs are involved in their dictionary copy to avoid overhead from collective MPI calls.&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
Currently, the &#039;&#039;&#039;YAML&#039;&#039;&#039; parser supports the following features:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Single&#039;&#039;&#039; or &#039;&#039;&#039;multiple&#039;&#039;&#039; line comments start with a hash &#039;&#039;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;#&amp;lt;/span&amp;gt;&#039;&#039;&#039;. Also, comment after a key/value pair is allowed. All comments are skipped during processing.&lt;br /&gt;
&lt;br /&gt;
*It has an &#039;&#039;&#039;unlimited nested structure&#039;&#039;&#039; (lists, mappings, hierarchies). Indentation of whitespace is used to denote structure.&lt;br /&gt;
&lt;br /&gt;
*It has an &#039;&#039;&#039;unrestricted schema indentation&#039;&#039;&#039;. However, some schema validators recommend or impose &#039;&#039;&#039;two whitespaces&#039;&#039;&#039; indentations.&lt;br /&gt;
&lt;br /&gt;
*A &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;colon&amp;lt;/span&amp;gt; follows a &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;key&amp;lt;/span&amp;gt; to denote a mapping &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; like:&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;ocean_model&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*It supports &amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;Anchors&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;salmon&amp;quot;&amp;gt;Aliases&amp;lt;/span&amp;gt;.&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;ATM_component&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;&amp;amp;ATM&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;WRF&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;metadata&amp;lt;/span&amp;gt;:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  - &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_eastward_wind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface eastward wind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;Uwind&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;uwind&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source_units&amp;lt;/span&amp;gt;:        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;m s-1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination_units&amp;lt;/span&amp;gt;:   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;m s-1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source_grid&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;cell_center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination_grid&amp;lt;/span&amp;gt;:    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;cell_center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;0.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;connected_to&amp;lt;/span&amp;gt;:        &amp;lt;span class=&amp;quot;salmon&amp;quot;&amp;gt;*ATM&amp;lt;/span&amp;gt;                                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;# u10&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;regrid_method&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;bilinear&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;extrapolate_method&amp;lt;/span&amp;gt;:  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;none&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*It supports &#039;&#039;&#039;blocking lists&#039;&#039;&#039;: members are denoted by a leading &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;hyphen-and-space&amp;lt;/span&amp;gt;, which is considered part of the indentation. &lt;br /&gt;
&lt;br /&gt;
*It supports a &#039;&#039;&#039;flow sequence&#039;&#039;&#039;: a vector list with values enclosed in &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;square brackets&amp;lt;/span&amp;gt; and separated by a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;comma-and-space&amp;lt;/span&amp;gt;, like a &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keyword&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;val1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; ...&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;valN&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keyword&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;value(s)&amp;lt;/span&amp;gt; is (are) processed and stored as strings but converted to a logical, integer, floating-point, or derived-type when appropriate during extraction. If particular derived-type values are needed, the caller can process such a structure outside the parser. &lt;br /&gt;
&lt;br /&gt;
*It removes &#039;&#039;&#039;unwanted control characters&#039;&#039;&#039; like tabs and separators (&#039;&#039;&#039;ASCII&#039;&#039;&#039; character code &#039;&#039;&#039;0-31&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
*It is restricted to the &#039;&#039;&#039;English&#039;&#039;&#039; uppercase and lowercase alphabet but can be expanded to other characters (see &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_ValueType&amp;lt;/span&amp;gt; routine). &lt;br /&gt;
&lt;br /&gt;
*Multiple or continuation lines are supported. So, for example, we can have:&amp;lt;div class=&amp;quot;box&amp;quot; style=&amp;quot;margin-left: 30px;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;state variables&amp;lt;/span&amp;gt;: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_surface_height_anomaly&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;barotropic_sea_water_x_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;barotropic_sea_water_y_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_x_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_y_velocity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_potential_temperature&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sea_water_practical_salinity&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extraction==&lt;br /&gt;
&lt;br /&gt;
Several derived-type structures are declared to facilitate the extraction of similar data blocks compactly from the YAML dictionary (&#039;&#039;&#039;CLASS&#039;&#039;&#039; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_tree&amp;lt;/span&amp;gt;) in a compact way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Ivec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! integer structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Ivec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Lvec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Lvec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Rvec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! real structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;kind_real&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Rvec&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PUBLIC&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! scalar value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;pointer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;vector(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! recursive vector&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! values&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived-type structure below, extended/inherited from parent &amp;quot;yaml_Svec&amp;quot;, extracts hierarchies of keys and associated values from the &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary object. The calling program specifies a key string that may be generated by aggregating nested keys with a period. Also, it can extract flow sequence string element values that are separated by commas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;EXTENDS&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_extract&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;has_vector&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! true if loaded vector values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_extract&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These public structures can be used in applications to extract block list &#039;&#039;&#039;YAML&#039;&#039;&#039; constructs. The key may represent a &#039;&#039;&#039;sequence flow&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; with a vector of values. The values can be integers, logicals, reals, or strings.  For example, suppose that the &#039;&#039;&#039;YAML&#039;&#039;&#039; file has the following &#039;&#039;&#039;blocking list&#039;&#039;&#039; entries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_downward_heat_flux_in_sea_water&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface net heat flux&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shflux&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shf&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;shf_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_wind_x_stress&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface zonal wind stress component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;sustr&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;taux&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;atm_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt;:       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface_wind_y_stress&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;:           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;surface meridional wind stress component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;:          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;svstr&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;data_variables&amp;lt;/span&amp;gt;:      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;[&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;tauy&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;atm_time&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;scale&amp;lt;/span&amp;gt;:               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;debug write&amp;lt;/span&amp;gt;:         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the code to extract the data from the &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;) is straightforward (see above for how to create and initialize a &#039;&#039;&#039;YAML&#039;&#039;&#039; dictionary object):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_parser_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt;                             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processing error flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;,  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(:)&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! logical data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(:)&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! floating point data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yaml_Svec&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(:)&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! string data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;short_name&#039;&amp;lt;/span&amp;gt;,     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;data_variables&#039;&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;scale&#039;&amp;lt;/span&amp;gt;,          &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt;)&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ErrorFlag&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;debug write&#039;&amp;lt;/span&amp;gt;,    &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L&amp;lt;/span&amp;gt;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that the internal adopted syntax is to aggregate the hierarchy of &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;keys&amp;lt;/span&amp;gt; separated by a &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dot&amp;lt;/span&amp;gt; in the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;keystring&amp;lt;/span&amp;gt; (&#039;&#039;e.g.&#039;&#039;, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;import&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;debug write&#039;&amp;lt;/span&amp;gt;) during the extraction call. The above extraction statement yields the following values from a single invocation of the overloaded function &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;yaml_get&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shflux&#039;&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;short_name&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;sustr&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S1(3)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;svstr&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(1)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shf&#039;&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(1)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;shf_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(2)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;taux&#039;&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(2)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;atm_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(3)%vector(1)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;tauy&#039;&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;data_variables&#039;&amp;lt;/span&amp;gt; vector of values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;S2(3)%vector(2)%value&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;&#039;atm_time&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(1)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;scale&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(2)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;F(3)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;1.0d0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(1)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;&#039;debug write&#039;&amp;lt;/span&amp;gt; single value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(2)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;     &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;L(3)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS/Utility/get_metdata.F&amp;lt;/span&amp;gt; for more details on how the metadata is processed from input &#039;&#039;&#039;YAML&#039;&#039;&#039; files.&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=NUOPC_Cap&amp;diff=6535</id>
		<title>NUOPC Cap</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=NUOPC_Cap&amp;diff=6535"/>
		<updated>2022-06-26T21:18:56Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Capabilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS Native ESMF/NUOPC Cap&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This document describes the ROMS [[Model_Coupling_ESMF|ESMF/NUOPC]] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_roms.F&amp;lt;/span&amp;gt; used in the ROMS native coupling infrastructure shown below. In this case, ROMS is driving the coupled system (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_driver.h&amp;lt;/span&amp;gt;), which &#039;&#039;&#039;creates&#039;&#039;&#039;, &#039;&#039;&#039;register&#039;&#039;&#039;, &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039; the coupling of each Earth System Model (&#039;&#039;&#039;ESM&#039;&#039;&#039;) component (&#039;&#039;&#039;data&#039;&#039;&#039;, &#039;&#039;&#039;atmosphere&#039;&#039;&#039;, &#039;&#039;&#039;sea-ice&#039;&#039;&#039;, &#039;&#039;&#039;wave&#039;&#039;&#039;, and &#039;&#039;&#039;ocean&#039;&#039;&#039;). It also sets the coupler &#039;&#039;&#039;connectors&#039;&#039;&#039; and the &#039;&#039;&#039;RunSequence&#039;&#039;&#039; policy (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_esm.F&amp;lt;/span&amp;gt;). The framework provides the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; modules for each coupled component. Detailed information about &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; and how it is implemented in ROMS can be found on the [[Model_Coupling_ESMF|Earth System Modeling Framework]] WikiROMS page.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is a Fortran module that serves as the interface to a model when used in a &#039;&#039;&#039;NUOPC&#039;&#039;&#039;-based coupled system. The term &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is used because it is a lightweight software layer that sits on top of the model kernel, making calls to its &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039; phases and exposing the model data structures to the field exchange (&#039;&#039;&#039;import&#039;&#039;&#039; and &#039;&#039;&#039;export&#039;&#039;&#039; states) between coupled components.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ROMS_Coupling.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;Figure 1:&#039;&#039;&#039;&#039;&#039; ROMS native ESMF/NUOPC coupling infrastructure&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/mod_esmf_esm.F&amp;lt;/span&amp;gt; module declares several derived-type structures to facilitate the management of all internal objects and variables in each &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled component:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling time managing variables and &#039;&#039;&#039;ESMF&#039;&#039;&#039; objects. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Restarted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i8b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AdvanceCount&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! advance counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Current_Time&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Reference&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Restart&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Start&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Stop&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Step&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CalendarString&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! 360_day, gregorian&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_ReferenceString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_RestartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StopString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Calendar&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Calendar&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Clock&amp;lt;/span&amp;gt;)          :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Direction_flag&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Direction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CurrentTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_TimeInterval&amp;lt;/span&amp;gt;)   :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;. . .&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled state sets. If appropriate, it includes the logic for connecting nested grids. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LinkedGrid(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected grid&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DataCoupledSets(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA linked sets&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SetLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! set label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExpLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImpLabel(:)&amp;lt;/span&amp;gt; ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;import label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export set&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;COUPLED(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATA&#039;&#039;&#039; model field processing information. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lcycle&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cycling time coordinate&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lcoord&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coordinates attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lmask&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lmulti&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field across multi-files&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LastRec&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processed last record&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icomp&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! target component index&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncid&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! NetCDF file ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field variable ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nvdim&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number spatial dimensions&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Zlevel&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! level index to process&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nrec&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of time records&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Trec&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest read time record&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Masking land value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Masking sea value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vsize(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! dimensions size&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! add_offset attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;FillValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! _FillValue attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! scale_factor attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clength&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time cycling length&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LonMin&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid minimum longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LonMax&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid maximum longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LatMin&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid minimum latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LatMax&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid maximum latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tscale&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time scale to day&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmono&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! monotonic time (days)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vmin&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vmax&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (days)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Date(6,2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time-snapshots dates YYYY,MM,DD hh:mm:ss.ss&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=30), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Dname(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable dimensions names&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vcoord(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable coordinates names&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22 ) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! date-snapshots string&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=30 ) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SpecialAction&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! special processing&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tname&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tunits&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vname&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vunits&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vdescriptor&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Variable descriptive name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vlongname&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long_name attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncfile&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! NetCDF filename&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A2d(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time interpolated 2D data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A3d(:,:,:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time interpolated 3D data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A2dG(:,:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest 2D data snapsnots&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A3dG(:,:,:,:)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest 3D data snapsnots&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Field&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;field&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;)        :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATA&#039;&#039;&#039; model high-level structure. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nfields&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nfiles&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of input files&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ctarget(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component target&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Field(:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field short-name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Export(:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Export field structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;T_IO&amp;lt;/span&amp;gt;),       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IFS(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Input Files structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields metadata information. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;connected&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected to coupler&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! write exchanged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;enable_integral_adj&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! area integral adjusted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! internal field ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;etype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field extrapolation flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;itype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field interpolation flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ctarget&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component destination&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! date-snapshots string&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! short name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_vname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Vname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_tname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Tname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RegridMethod&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! regrid method&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExtrapMethod&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! extrapolate&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field scale factor&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field add offset value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (day)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields mesh data. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gid&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;area(:,:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid area&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Melding coefficients used to combine fields from &#039;&#039;&#039;DATA&#039;&#039;&#039; and &#039;&#039;&#039;ESM&#039;&#039;&#039; components. The weight factors are read from the input NetCDF specified in the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;WeightsFile(atmos)&amp;lt;/span&amp;gt; keyword. The user has  full control of how the merging is done. It is recommended to provide a gradual transition between the two components. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  Recall that the &#039;&#039;&#039;DATA&#039;&#039;&#039; component supplies needed data to a particular &#039;&#039;&#039;ESM&#039;&#039;&#039; component.  For example, it may export data to the atmosphere model at locations not covered by the other &#039;&#039;&#039;ESM&#039;&#039;&#039; components because of smaller grid coverage.  If the atmosphere and ocean model grids are incongruent, the atmosphere component needs to import sea surface temperature (SST) on those grid points not covered by the ocean component. Thus, the weighting coefficients are used to merge the SST data: &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_atm(:,:)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cesm(:,:)&amp;lt;/span&amp;gt; * &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_esm(:,:)&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; * &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_dat(:,:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;  where&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; Cesm(:,:)&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&amp;lt;br /&amp;gt;&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NestedGrid&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid needing merged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;VnameDATA&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA weights variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;VnameESM&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ESM  weights variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncfile&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Weights NetCDF filename&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coefficients for DATA&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cesm(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coefficients for ESM&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WEIGHTS(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WeightDAT&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.0_dp&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA component weight&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WeightESM&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0_dp&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ESM  component weight&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupled models high-level object, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels=5&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active for coupling&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sea  mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ngrids&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number nested grids&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number model PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeFrac(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! driver time fraction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mesh(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MODELS(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupling models connector used for the interpolation/extrapolaton between source and destination fields, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active connector&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;divDT&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MaskInteraction&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector mask interaction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of connector PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONNECTORS(:,:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Define &#039;&#039;&#039;DATA&#039;&#039;&#039; Model field processing information from input data files, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. Currently, the &#039;&#039;&#039;DATA&#039;&#039;&#039; Model only export fields and it only supports input NetCDF files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DataSet(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;ESM&#039;&#039;&#039; clock for driver (zeroth element) and coupled components, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;Internal module parameters and variables:&#039;&#039;&#039;&amp;lt;br /&amp;gt; &lt;br /&gt;
** Number of coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; gridded components. Currently, five &#039;&#039;&#039;ESM&#039;&#039;&#039; components are supported (&#039;&#039;&#039;ROMS&#039;&#039;&#039;, &#039;&#039;&#039;DATA&#039;&#039;&#039;, &#039;&#039;&#039;ATMOSPHERE&#039;&#039;&#039;, &#039;&#039;&#039;SEA-ICE&#039;&#039;&#039;, and &#039;&#039;&#039;WAVE&#039;&#039;&#039; model types).  &amp;lt;br /&amp;gt; All supported components are accounted here even if we are running an application with less number of models. The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt; switches are use to operate only on the desired coupled components. This is done to have complete infornation in the above structures. The gridded arrays are never allocated if a particular component is not active. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of nested grids.  All are initialized to just one grid; its values are overwritten during processing. An additional variable &#039;&#039;&#039;NgridsR&#039;&#039;&#039; is created to avoid using ROMS module &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_param&amp;lt;/span&amp;gt; in the generic interface.  Both &#039;&#039;&#039;Ngrids&#039;&#039;&#039; and &#039;&#039;&#039;NgridsR&#039;&#039;&#039; will have the same value.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsA&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Atmosphere Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsD&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsI&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Sea-ice Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsR&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ROMS&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsW&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Wave Model&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; components identification indices.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idriver&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iatmos&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idata&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iseaice&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iwave&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Generic &#039;&#039;&#039;ESM&#039;&#039;&#039; component labels used in the &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CASE&amp;lt;/span&amp;gt; constructs.  We cannot use the identification indices because the vector &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms(:)&amp;lt;/span&amp;gt; cannot be defined as a parameter and a non constant expression is illegal: &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CASE&amp;lt;/span&amp;gt; ( &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsR&amp;lt;/span&amp;gt;) )&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 3), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clabel(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len=&amp;lt;/span&amp;gt;10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cmodel(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of ROMS export and import fields per component. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nexport(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nimport(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Model coupling type: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] Explicit, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;otherwise&amp;lt;/span&amp;gt;] Semi-Implicit. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;explicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined using known values from the time-step before it. Explicit methods require less computational effort and are accurate for small coupling time-steps. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;implicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined by including values at the next time-step. Implicit methods are stable and allow longer coupling time-steps but are more computationally expensive. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;semi-implicit coupling&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS -&amp;gt; ATM&#039;&#039;&#039; is explicit, &#039;&#039;&#039;ATM -&amp;gt; ROMS&#039;&#039;&#039; is implicit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplingType&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Distributed-memory communicator handle for each component, Total number of PETs needed in concurrent PET layout, rank of each PET, and PET layout (sequential or concurrent). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMcomm(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;sumPETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETrank&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=10) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlayoutOption&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Driver clock parameters specified in configuration script. A integer vector with six elements: (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) year including century, like 2017; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;) month of the year, 1 to 12; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;) day of the month; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;) hour of the day, 0 to 23; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;) minutes of the hour, 0 to 59; and (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;) seconds of the minute, 0 to 59 &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceDate&amp;lt;/span&amp;gt;(6)          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! reference date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartDate&amp;lt;/span&amp;gt;(6)            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! restarting date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartDate&amp;lt;/span&amp;gt;(6)              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! starting date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopDate&amp;lt;/span&amp;gt;(6)               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! stopping date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;(6)               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling interval&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Today date string. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=44) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TodayDateString&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling simulation reference date number, element: (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) seconds, and (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;) fractional days&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceDateNumber&amp;lt;/span&amp;gt;(2)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;DATA&#039;&#039;&#039; component parallel distributed-memory domain partions in the &#039;&#039;&#039;I&#039;&#039;&#039;- and &#039;&#039;&#039;J&#039;&#039;&#039;-directions (lon,lat).  &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ItileD&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;JtileD&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling debugging flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no debugging, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports informative messages, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;1&#039;&amp;lt;/span&amp;gt; plus writes grid information in &#039;&#039;&#039;VTK&#039;&#039;&#039; format,  [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;2&#039;&amp;lt;/span&amp;gt; plus writes exchage fields into &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DebugLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Execution tracing level flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no tracing, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports sequence of coupling subroutine calls, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;gt; plus writes voluminous &#039;&#039;&#039;ESMF&#039;&#039;&#039; library tracing information which slowdown performace, and creates large log file. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TraceLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Switch to trace/track run sequence during debugging.  All information is written to Fortan unit &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt;. For now, use standard output unit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESM_track&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence unit&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled model staggered grid-cell type indices. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inan&amp;lt;/span&amp;gt;    = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! unstaggered, cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icenter&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icorner&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell corners&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iupoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! right and left cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ivpoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper and lower cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=6), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;GridType&amp;lt;/span&amp;gt; =                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;N/A&amp;lt;/span&amp;gt;   &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Corner&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;U&amp;lt;/span&amp;gt;     &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;V&amp;lt;/span&amp;gt;     &#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;REGRID&#039;&#039;&#039; interpolation method between source and destination fields. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inone&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! none&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ibilin&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! bilinear&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ipatch&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! high-order patch recovery&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iconsv1&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! first-order conservative&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iconsv2&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! second-order conservative&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;InStoD&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearest neighbor Src to Dst&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;InDtoS&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearest neighbor Dst to Src&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=4), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:6) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IntrpType&amp;lt;/span&amp;gt; =                  &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NONE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;BLIN&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PTCH&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CNS1&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CNS2&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NS2D&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ND2S&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
** Extrapolation method for unmapped destination points. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Enone&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! none&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExStoD&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearear neighbor Src to Dst&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Eidavg&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! inverse distance average&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ecreep&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! creep fill&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;E2steps&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Turuncoglu two steps&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=4), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExtrpType&amp;lt;/span&amp;gt; =                  &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NONE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NS2D&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IDAV&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CREE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2STP&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  The number of levels to output for the extrapolation methods that fill levels, like creep fill (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMF_EXTRAPMETHOD_CREEP&amp;lt;/span&amp;gt;). Unmapped destination points are supplied by repeatedly moving data from mapped locations to neighboring unmapped locations for a user-specified number of levels.  For each creeped point, its value is the average of the values of the immediate neighbors from the mapped points from regridding (&#039;&#039;&#039;ESMF&#039;&#039;&#039; Reference Manual, v &#039;&#039;&#039;8.0.0&#039;&#039;&#039;). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;extrapNumLevels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Interpolation connectors mask interaction flags. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverLand&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverOcean&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverAll&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=3), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(3) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MaskType&amp;lt;/span&amp;gt; =                     &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                   (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LND&amp;lt;/span&amp;gt;&#039;,                      &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OCN&amp;lt;/span&amp;gt;&#039;,                      &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ALL&amp;lt;/span&amp;gt;&#039;/)&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling run mode: sequential or concurrent. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iseq&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ipar&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (len=10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(2) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RunMode&amp;lt;/span&amp;gt; =                     &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                   (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SEQUENTIA&amp;lt;/span&amp;gt;L&#039;,               &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONCURRENT&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Compling standard input parameters filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CinpName&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;ESM&#039;&#039;&#039; free-format run sequence configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONFname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** ROMS coupling &#039;&#039;&#039;YAML&#039;&#039;&#039; configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CPLname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Standard input filename for each coupled model, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;INPname(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Standard output units and log messages filename for coupler and &#039;&#039;&#039;ESMF&#039;&#039;&#039; library. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cplout&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling driver&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dataout&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! data component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 8), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMnameLog&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;log.esmf&amp;lt;/span&amp;gt;&#039;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 8), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplerLog&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;log.coupler&amp;lt;/span&amp;gt;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Output &#039;&#039;&#039;NetCDF&#039;&#039;&#039; file used to store field snapshot attributes needed for time interpolation by the &#039;&#039;&#039;ESM&#039;&#039;&#039; component kernel during concurrent coupling. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=17), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AttFileName&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;time_intrp_att.nc&amp;lt;/span&amp;gt;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; single and double precision constants. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;99_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;UNMAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;98_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r8&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module contains a set of subroutines that are required by &#039;&#039;&#039;NUOPC&#039;&#039;&#039;. According to a predefined calling sequence, these subroutines are called by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; infrastructure. Some subroutines are called during the initialization of the coupled system, some during the run of the coupled system, and some during the finalization of the coupled system.&lt;br /&gt;
&lt;br /&gt;
The initialization sequence is the most complex and is governed by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; technical rules. Details about the initialization sequence can be found in the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; Reference Manual. The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; requires &#039;&#039;&#039;ESMF version 8 or higher&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=&amp;quot;1000&amp;quot;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetServices&amp;lt;/span&amp;gt; &lt;br /&gt;
|Entry point to the ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; and the only &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; routine. It sets the ROMS component chared-object entry points for using &#039;&#039;&#039;NUOPC&#039;&#039;&#039; generic methods for &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 1 initialization which sets import and export fields long and short names into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP2&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 2 initialization which initializes the ROMS component (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_initialize&amp;lt;/span&amp;gt;), sets component grid (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;), and adds fields into import and export into respective states.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_DataInit&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS component fields during initialization or restart.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component date calendar, start and stop times, and coupling interval.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetRunClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS run clock manually to avoid getting zero time stamps at the first regridding call.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_CheckImport&amp;lt;/span&amp;gt;&lt;br /&gt;
|Checks if ROMS component import field is at the correct time.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component staggered, horizontal grid arrays, grid area, and land/sea mask if any.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetStates&amp;lt;/span&amp;gt;&lt;br /&gt;
|Adds ROMS component &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_ModelAdvance&amp;lt;/span&amp;gt;&lt;br /&gt;
|Advances ROMS component for a coupling interval. It calls &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt; routines.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetFinalize&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finalizes ROMS component execution.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt;&lt;br /&gt;
|Loads import fields into ROMS internal kernel arrays.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS fields to other gridded components.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Rotate&amp;lt;/span&amp;gt;&lt;br /&gt;
|Rotates vector components from computational grid to geographical &#039;&#039;&#039;EAST&#039;&#039;&#039; and &#039;&#039;&#039;NORTH&#039;&#039;&#039; directions or vice versa.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NUOPC&amp;lt;/span&amp;gt; cap modules are available within the ROMS native framework:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;ESMF/NUOPC Modules&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Tested&#039;&#039;&#039;&lt;br /&gt;
|style=&amp;quot;width: 700px;&amp;quot; align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_driver.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; Master Driver&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_esm.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Sets &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; &#039;&#039;&#039;Services&#039;&#039;&#039; and &#039;&#039;&#039;RunSequence&#039;&#039;&#039; for each coupled component&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_coupler.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;Computes&#039;&#039;&#039;, &#039;&#039;&#039;Execute&#039;&#039;&#039;, and &#039;&#039;&#039;Release&#039;&#039;&#039; the &#039;&#039;&#039;Connectors&#039;&#039;&#039; between &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination&amp;lt;/span&amp;gt; fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/mod_esmf_esm.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines framework object &#039;&#039;&#039;structures&#039;&#039;&#039; and &#039;&#039;&#039;variables&#039;&#039;&#039; and includes support routines&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_coamps.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Coupled Ocean-Atmosphere Mesoscale Prediction System (&#039;&#039;&#039;COAMPS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_coamps.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Coupled Ocean-Atmosphere Mesoscale Prediction System (&#039;&#039;&#039;COAMPS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_regcm.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| ICTP Regional Climate Model (&#039;&#039;&#039;RegCM&#039;&#039;&#039;, Version &#039;&#039;&#039;4.5&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_wrf.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Weather Research and Forecasting model (&#039;&#039;&#039;WRF&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_data.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generic &#039;&#039;&#039;DATA&#039;&#039;&#039; component via &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_ice_cice.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| Los Alamos Sea Ice Model (&#039;&#039;&#039;CICE&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_roms.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Regional Ocean Modeling System (&#039;&#039;&#039;ROMS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_wav_wam.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| ECMWF&#039;s Wave Model (&#039;&#039;&#039;WAM&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_wav_ww3.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| WaveWatch III (&#039;&#039;&#039;WW3&#039;&#039;&#039;), &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;under development&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Import and Export Fields==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields are configured and specified in the &#039;&#039;&#039;YAML&#039;&#039;&#039; file [[coupling_esmf_atm.yaml]]. Check the following [[coupling_esmf_atm.yaml|wikiROMS]] page for detailed information.  The user has full control of the coupling exchange fields metadata.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; library version &#039;&#039;&#039;8.0.0&#039;&#039;&#039; or higher supports native nesting capabilities.  The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; layer now allows coupling sets in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; states of the &#039;&#039;&#039;ESM&#039;&#039;&#039; components. A nested grid is represented as another &#039;&#039;&#039;ESMF_Grid&#039;&#039;&#039; object so that a coupled model can have a set of telescoping meshes of decreasing spatial resolution. The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; connector can recognize the different grids and exchange fields to a connected &#039;&#039;&#039;ESM&#039;&#039;&#039; component. Various types of connections are possible, like nest-to-nest, fine-to-coarse, or coarse-to-fine. The user decides which nested grids to connect. The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;NUOPC_AddNestedState&amp;lt;/span&amp;gt; routine is used to advertise the nested couple sets.&lt;br /&gt;
&lt;br /&gt;
For example, the ROMS &#039;&#039;&#039;NOUPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module routine &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt; illustrates how easily the coupled sets is added to the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState&amp;lt;/span&amp;gt; as shown below in the green blocks of code. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:ImportCoupledStates.png]]&lt;br /&gt;
|[[Image:ExportCoupledStates.png]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=NUOPC_Cap_UFS&amp;diff=6534</id>
		<title>NUOPC Cap UFS</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=NUOPC_Cap_UFS&amp;diff=6534"/>
		<updated>2022-06-26T21:18:16Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Module Subroutines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS Stand-Alone ESMF/NUOPC Cap for the UFS&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This document describes the stand-alone ROMS [[Model_Coupling_ESMF|ESMF/NUOPC]] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module to be used by third-party coupling frameworks, like the Unified Forecast System (&#039;&#039;&#039;UFS&#039;&#039;&#039;).  It is a lightweight software layer on top of ROMS that can be used by &#039;&#039;&#039;NUOPC&#039;&#039;&#039;-based packages (&#039;&#039;&#039;CMEPS/CDEPS&#039;&#039;&#039;, &#039;&#039;&#039;NEMS&#039;&#039;&#039;, and others) to couple to other Earth System Models (&#039;&#039;&#039;ESM&#039;&#039;&#039;s). Detailed information about &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; and its implementation in ROMS can be found on the [[Model_Coupling_ESMF|Earth System Modeling Framework]] WikiROMS page.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is a Fortran module that serves as the interface to a model when it&#039;s used in a &#039;&#039;&#039;NUOPC&#039;&#039;&#039;-based coupled system. The term &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is used because it is a lightweight software layer that sits on top of model code, making calls to it and exposing model data structures in a standard way.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;cmeps_roms.F&amp;lt;/span&amp;gt; module declares several derived-type structures to facilitate the management of all internal objects and variables:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling time managing variables and &#039;&#039;&#039;ESMF&#039;&#039;&#039; objects. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Restarted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i8b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AdvanceCount&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! advance counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Current_Time&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Reference&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Restart&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Start&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Stop&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Step&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CalendarString&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! 360_day, gregorian&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_ReferenceString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_RestartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StopString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Calendar&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Calendar&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Clock&amp;lt;/span&amp;gt;)          :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Direction_flag&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Direction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CurrentTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_TimeInterval&amp;lt;/span&amp;gt;)   :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled state sets. If appropriate, it includes the logic for connecting nested grids. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LinkedGrid(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected grid&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SetLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! set label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExpLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImpLabel(:)&amp;lt;/span&amp;gt; ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;import label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;COUPLED(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields metadata information. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;connected&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected to coupler&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! write exchanged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                      ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;field grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! short name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_vname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Vname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_tname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Tname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;map_norm&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! mapping norm&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;map_type&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! regrid method&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22)  :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! snapshots date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field scale factor&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field add offset value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (day)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields mesh data. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gid&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;area(:,:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid area&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupled models high-level object, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels=1&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;PRIVATE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active for coupling&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sea  mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ngrids&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number nested grids&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number model PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeFrac(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! driver time fraction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mesh(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MODELS(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal module parameters and variables:&#039;&#039;&#039;&lt;br /&gt;
**  Switch to trace/track run sequence during debugging.  All information is written to Fortran unit trac. For now, it uses the standard output unit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESM_track&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.TRUE.&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence switch&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; gridded components and identification index. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idriver&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of ROMS export and import fields per component. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nexport(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nimport(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Model coupling type: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] Explicit, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;otherwise&amp;lt;/span&amp;gt;] Semi-Implicit. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;explicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined using known values from the time-step before it. Explicit methods require less computational effort and are accurate for small coupling time-steps. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;implicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined by including values at the next time-step. Implicit methods are stable and allow longer coupling time-steps but are more computationally expensive. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;semi-implicit coupling&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS -&amp;gt; ATM&#039;&#039;&#039; is explicit, &#039;&#039;&#039;ATM -&amp;gt; ROMS&#039;&#039;&#039; is implicit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplingType&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Linked/coupled ROMS nested grid number. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;linked_grid&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Distributed-memory communicator handle for each component, rank of each PET, and PET layout (sequential or concurrent). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMcomm(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETrank&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlayoutOption(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling debugging flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no debugging, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports informative messages, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;1&#039;&amp;lt;/span&amp;gt; plus writes grid information in &#039;&#039;&#039;VTK&#039;&#039;&#039; format,  [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;2&#039;&amp;lt;/span&amp;gt; plus writes exchage fields into &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DebugLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Execution tracing level flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no tracing, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports sequence of coupling subroutine calls, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;gt; plus writes voluminous &#039;&#039;&#039;ESMF&#039;&#039;&#039; library tracing information which slowdown performace, and creates large log file. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TraceLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Standard output units. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cplout&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling driver&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence unit&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled model staggered grid-cell type indices. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inan&amp;lt;/span&amp;gt;    = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! unstaggered, cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icenter&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icorner&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell corners&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iupoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! right and left cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ivpoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper and lower cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=6), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;GridType&amp;lt;/span&amp;gt; =                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;N/A&amp;lt;/span&amp;gt;   &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Corner&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;U&amp;lt;/span&amp;gt;     &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;V&amp;lt;/span&amp;gt;     &#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Standard input filename for each coupled model, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;INPname(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** ROMS coupling &#039;&#039;&#039;YAML&#039;&#039;&#039; configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CPLname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;ESM&#039;&#039;&#039; strings. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CoupledSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportStateName&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportStateName&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; single and double precision constants. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;99_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;UNMAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;98_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r8&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UFS Interface==&lt;br /&gt;
The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; file is connected to the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;UFS.F90&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EARTH_GRID_COMP.F90&amp;lt;/span&amp;gt; with &#039;&#039;&#039;C&#039;&#039;&#039;-preprocessing option &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;FRONT_ROMS&amp;lt;/span&amp;gt; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;MODULE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;module_EARTH_GRID_COMP&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      ...&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;#ifdef FRONT_ROMS&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;USE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;cmeps_roms_mod&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;ONLY&amp;lt;/span&amp;gt; : &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SS&amp;lt;/span&amp;gt; =&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetServices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;#endif&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      ...&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END MODULE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;module_EARTH_GRID_COMP&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Module Subroutines==&lt;br /&gt;
The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module contains a set of subroutines that are required by &#039;&#039;&#039;NUOPC&#039;&#039;&#039;. These subroutines are called by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; infrastructure according to a predefined calling sequence. Some subroutines are called during the initialization of the coupled system, some during the run of the coupled system, and some during the finalization of the coupled system.&lt;br /&gt;
&lt;br /&gt;
The initialization sequence is the most complex and is governed by the NUOPC technical rules. Details about the initialization sequence can be found in the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; Reference Manual. The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; requires &#039;&#039;&#039;ESMF version 8 or higher&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=&amp;quot;1000&amp;quot;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetServices&amp;lt;/span&amp;gt; &lt;br /&gt;
|Entry point to the ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; and the only &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; routine. It sets the ROMS component shared-object entry points for using &#039;&#039;&#039;NUOPC&#039;&#039;&#039; generic methods for &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Create&amp;lt;/span&amp;gt; &lt;br /&gt;
|Allocates module internal structures and processes configuration from &#039;&#039;&#039;YAML&#039;&#039;&#039; file: [[roms_cmeps.yaml]].&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 1 initialization which sets import and export fields long and short names into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP2&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 2 initialization which initializes the ROMS component (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Initialize&amp;lt;/span&amp;gt;), sets component grid (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;), and adds fields into import and export into respective states.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_DataInit&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS component fields during initialization or restart.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component date calendar, start and stop times, and coupling interval.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetRunClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS run clock manually to avoid getting zero time stamps at the first regridding call.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_CheckImport&amp;lt;/span&amp;gt;&lt;br /&gt;
|Checks if ROMS component import field is at the correct time.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component staggered, horizontal grid arrays, grid area, and land/sea mask if any.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetStates&amp;lt;/span&amp;gt;&lt;br /&gt;
|Adds ROMS component &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_ModelAdvance&amp;lt;/span&amp;gt;&lt;br /&gt;
|Advances ROMS component for a coupling interval. It calls &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt; routines.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetFinalize&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finalizes ROMS component execution.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt;&lt;br /&gt;
|Loads import fields into ROMS internal kernel arrays.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS fields to other gridded components.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Rotate&amp;lt;/span&amp;gt;&lt;br /&gt;
|Rotates vector components from computational grid to geographical &#039;&#039;&#039;EAST&#039;&#039;&#039; and &#039;&#039;&#039;NORTH&#039;&#039;&#039; directions or vice versa.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Report_TimeStamp&amp;lt;/span&amp;gt;&lt;br /&gt;
|Reports coupling time-stamp.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Import and Export Fields==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields are configured and specified in the &#039;&#039;&#039;YAML&#039;&#039;&#039; file [[roms_cmeps.yaml]]. Check the following [[roms_cmeps.yaml|wikiROMS]] page for detailed information.  The user has full control of the coupling exchange fields metadata.&lt;br /&gt;
&lt;br /&gt;
Currently, &#039;&#039;&#039;CMEPS&#039;&#039;&#039; does not support coupling of nested grids. The &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; library version &#039;&#039;&#039;8.0.0&#039;&#039;&#039; or higher supports native nesting capabilities.  The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; layer now allows coupling sets in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; states of the &#039;&#039;&#039;ESM&#039;&#039;&#039; components. A nested grid is represented as another &#039;&#039;&#039;ESMF_Grid&#039;&#039;&#039; object so that a coupled model can have a set of telescoping meshes of decreasing spatial resolution. The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; connector can recognize the different grids and exchange fields to a connected &#039;&#039;&#039;ESM&#039;&#039;&#039; component. Various types of connections are possible, like nest-to-nest, fine-to-coarse, or coarse-to-fine. The user decides which nested grids to connect. The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;NUOPC_AddNestedState&amp;lt;/span&amp;gt; routine is used to advertise the nested couple sets.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;&#039;NOUPC&#039;&#039;&#039; cap module routines &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt; can be modified easily to add the coupled sets to the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState&amp;lt;/span&amp;gt; as shown below in the green blocks of code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:ImportCoupledStates.png]]&lt;br /&gt;
|[[Image:ExportCoupledStates.png]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=NUOPC_Cap&amp;diff=6533</id>
		<title>NUOPC Cap</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=NUOPC_Cap&amp;diff=6533"/>
		<updated>2022-06-26T21:10:21Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* Capabilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS Native ESMF/NUOPC Cap&amp;lt;/div&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This document describes the ROMS [[Model_Coupling_ESMF|ESMF/NUOPC]] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_roms.F&amp;lt;/span&amp;gt; used in the ROMS native coupling infrastructure shown below. In this case, ROMS is driving the coupled system (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_driver.h&amp;lt;/span&amp;gt;), which &#039;&#039;&#039;creates&#039;&#039;&#039;, &#039;&#039;&#039;register&#039;&#039;&#039;, &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039; the coupling of each Earth System Model (&#039;&#039;&#039;ESM&#039;&#039;&#039;) component (&#039;&#039;&#039;data&#039;&#039;&#039;, &#039;&#039;&#039;atmosphere&#039;&#039;&#039;, &#039;&#039;&#039;sea-ice&#039;&#039;&#039;, &#039;&#039;&#039;wave&#039;&#039;&#039;, and &#039;&#039;&#039;ocean&#039;&#039;&#039;). It also sets the coupler &#039;&#039;&#039;connectors&#039;&#039;&#039; and the &#039;&#039;&#039;RunSequence&#039;&#039;&#039; policy (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_esm.F&amp;lt;/span&amp;gt;). The framework provides the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; modules for each coupled component. Detailed information about &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; and how it is implemented in ROMS can be found on the [[Model_Coupling_ESMF|Earth System Modeling Framework]] WikiROMS page.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;NUOPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is a Fortran module that serves as the interface to a model when used in a &#039;&#039;&#039;NUOPC&#039;&#039;&#039;-based coupled system. The term &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; is used because it is a lightweight software layer that sits on top of the model kernel, making calls to its &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039; phases and exposing the model data structures to the field exchange (&#039;&#039;&#039;import&#039;&#039;&#039; and &#039;&#039;&#039;export&#039;&#039;&#039; states) between coupled components.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ROMS_Coupling.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;Figure 1:&#039;&#039;&#039;&#039;&#039; ROMS native ESMF/NUOPC coupling infrastructure&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/mod_esmf_esm.F&amp;lt;/span&amp;gt; module declares several derived-type structures to facilitate the management of all internal objects and variables in each &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled component:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling time managing variables and &#039;&#039;&#039;ESMF&#039;&#039;&#039; objects. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Restarted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i8b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AdvanceCount&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! advance counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Current_Time&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Reference&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Restart&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Start&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Stop&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_Step&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! seconds&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CalendarString&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! 360_day, gregorian&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_ReferenceString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_RestartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StartString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Time_StopString&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Calendar&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Calendar&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Clock&amp;lt;/span&amp;gt;)          :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Direction_flag&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Direction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CurrentTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Time&amp;lt;/span&amp;gt;)           :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopTime&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_TimeInterval&amp;lt;/span&amp;gt;)   :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;. . .&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ESM&#039;&#039;&#039; coupled state sets. If appropriate, it includes the logic for connecting nested grids. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LinkedGrid(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected grid&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DataCoupledSets(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA linked sets&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SetLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! set label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExpLabel(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImpLabel(:)&amp;lt;/span&amp;gt; ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;import label&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export set&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_CplSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;COUPLED(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATA&#039;&#039;&#039; model field processing information. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lcycle&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cycling time coordinate&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lcoord&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coordinates attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lmask&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Lmulti&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field across multi-files&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LastRec&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! processed last record&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icomp&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! target component index&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncid&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! NetCDF file ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field variable ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nvdim&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number spatial dimensions&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Zlevel&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! level index to process&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nrec&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of time records&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Trec&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest read time record&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Masking land value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Masking sea value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vsize(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! dimensions size&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! add_offset attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;FillValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! _FillValue attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! scale_factor attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clength&amp;lt;/span&amp;gt;                   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time cycling length&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LonMin&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid minimum longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LonMax&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid maximum longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LatMin&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid minimum latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LatMax&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid maximum latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tscale&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time scale to day&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmono&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! monotonic time (days)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vmin&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vmax&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (days)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Date(6,2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time-snapshots dates YYYY,MM,DD hh:mm:ss.ss&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=30), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Dname(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable dimensions names&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vcoord(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable coordinates names&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22 ) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! date-snapshots string&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=30 ) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SpecialAction&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! special processing&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tname&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tunits&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time variable units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vname&amp;lt;/span&amp;gt;           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vunits&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! variable units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vdescriptor&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Variable descriptive name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vlongname&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long_name attribute&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncfile&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! NetCDF filename&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A2d(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time interpolated 2D data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A3d(:,:,:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! time interpolated 3D data&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A2dG(:,:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest 2D data snapsnots&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;A3dG(:,:,:,:)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest 3D data snapsnots&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Field&amp;lt;/span&amp;gt;)       :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;field&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;)        :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATA&#039;&#039;&#039; model high-level structure. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nfields&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nfiles&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of input files&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ctarget(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component target&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Field(:)&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field short-name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Data&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Export(:)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Export field structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;T_IO&amp;lt;/span&amp;gt;),       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IFS(:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Input Files structure&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields metadata information. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;connected&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connected to coupler&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;debug_write&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! write exchanged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;enable_integral_adj&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! area integral adjusted&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;fid&amp;lt;/span&amp;gt;                        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! internal field ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;etype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field extrapolation flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;itype&amp;lt;/span&amp;gt;                      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field interpolation flag&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tindex&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! rolling two-time indices&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=20) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ctarget&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component destination&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=22) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DateString(2)&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! date-snapshots string&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;short_name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! short name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;standard_name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! standard name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;long_name&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! long name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dst_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DST units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_gtype&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC grid type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;src_units&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! SRC units&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_vname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Vname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nc_tname&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Tname&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RegridMethod&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! regrid method&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExtrapMethod&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! extrapolate&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;scale_factor&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field scale factor&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;add_offset&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! field add offset value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmin&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time minimum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tmax&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA time maximum value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tstr&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA lower time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tend&amp;lt;/span&amp;gt;                     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA upper time-snapshot&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Tintrp(2)&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! interpolation time (day)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Vtime(2)&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! latest two-time values&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_RouteHandle&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;rhandle&amp;lt;/span&amp;gt;    ! &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;field RouteHandle&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Import and export fields mesh data. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gid&amp;lt;/span&amp;gt;                           &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid ID&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;gtype&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid mesh type&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mask(:,:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid land/sea mask&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lon(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid longitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;lat(:,:)&amp;lt;/span&amp;gt;       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid latitude&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;area(:,:)&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid area&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Melding coefficients used to combine fields from &#039;&#039;&#039;DATA&#039;&#039;&#039; and &#039;&#039;&#039;ESM&#039;&#039;&#039; components. The weight factors are read from the input NetCDF specified in the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;WeightsFile(atmos)&amp;lt;/span&amp;gt; keyword. The user has  full control of how the merging is done. It is recommended to provide a gradual transition between the two components. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;  Recall that the &#039;&#039;&#039;DATA&#039;&#039;&#039; component supplies needed data to a particular &#039;&#039;&#039;ESM&#039;&#039;&#039; component.  For example, it may export data to the atmosphere model at locations not covered by the other &#039;&#039;&#039;ESM&#039;&#039;&#039; components because of smaller grid coverage.  If the atmosphere and ocean model grids are incongruent, the atmosphere component needs to import sea surface temperature (SST) on those grid points not covered by the ocean component. Thus, the weighting coefficients are used to merge the SST data: &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;  &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_atm(:,:)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cesm(:,:)&amp;lt;/span&amp;gt; * &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_esm(:,:)&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; * &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SST_dat(:,:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;  where&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt; Cesm(:,:)&amp;lt;/span&amp;gt; + &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;.&amp;lt;br /&amp;gt;&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NestedGrid&amp;lt;/span&amp;gt;               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid needing merged field&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;VnameDATA&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA weights variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;VnameESM&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ESM  weights variable name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ncfile&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Weights NetCDF filename&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cdat(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coefficients for DATA&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cesm(:,:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coefficients for ESM&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Meld&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WEIGHTS(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WeightDAT&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.0_dp&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA component weight&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;WeightESM&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0_dp&amp;lt;/span&amp;gt;      &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ESM  component weight&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupled models high-level object, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels=5&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                       &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active for coupling&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LandValue&amp;lt;/span&amp;gt;                &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! land mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SeaValue&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! sea  mask value&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ngrids&amp;lt;/span&amp;gt;                         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number nested grids&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportCalls&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import CALL counter&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number model PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeFrac(:,:)&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! driver time fraction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=:), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! component name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_Grid&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;grid(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! grid object&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Mesh&amp;lt;/span&amp;gt;),   &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;mesh(:)&amp;lt;/span&amp;gt;        &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! mesh&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Field&amp;lt;/span&amp;gt;),  &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportField(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export fields&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! import state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESMF_State&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState(:)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! export state&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Model&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MODELS(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Coupling models connector used for the interpolation/extrapolaton between source and destination fields, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt;                 &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! active connector&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;divDT&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MaskInteraction&amp;lt;/span&amp;gt;          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector mask interaction&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;nPETs&amp;lt;/span&amp;gt;                    &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! number of connector PETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlist(:)&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector PETs list&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;        &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=100) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! connector name&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;END TYPE&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Conn&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONNECTORS(:,:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Define &#039;&#039;&#039;DATA&#039;&#039;&#039; Model field processing information from input data files, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. Currently, the &#039;&#039;&#039;DATA&#039;&#039;&#039; Model only export fields and it only supports input NetCDF files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_DataSet&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DataSet(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;ESM&#039;&#039;&#039; clock for driver (zeroth element) and coupled components, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;TYPE&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;ESM_Clock&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;target&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ClockInfo(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  &#039;&#039;&#039;Internal module parameters and variables:&#039;&#039;&#039;&amp;lt;br /&amp;gt; &lt;br /&gt;
** Number of coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; gridded components. Currently, five &#039;&#039;&#039;ESM&#039;&#039;&#039; components are supported (&#039;&#039;&#039;ROMS&#039;&#039;&#039;, &#039;&#039;&#039;DATA&#039;&#039;&#039;, &#039;&#039;&#039;ATMOSPHERE&#039;&#039;&#039;, &#039;&#039;&#039;SEA-ICE&#039;&#039;&#039;, and &#039;&#039;&#039;WAVE&#039;&#039;&#039; model types).  &amp;lt;br /&amp;gt; All supported components are accounted here even if we are running an application with less number of models. The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IsActive&amp;lt;/span&amp;gt; switches are use to operate only on the desired coupled components. This is done to have complete infornation in the above structures. The gridded arrays are never allocated if a particular component is not active. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of nested grids.  All are initialized to just one grid; its values are overwritten during processing. An additional variable &#039;&#039;&#039;NgridsR&#039;&#039;&#039; is created to avoid using ROMS module &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;mod_param&amp;lt;/span&amp;gt; in the generic interface.  Both &#039;&#039;&#039;Ngrids&#039;&#039;&#039; and &#039;&#039;&#039;NgridsR&#039;&#039;&#039; will have the same value.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsA&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Atmosphere Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsD&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! DATA Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsI&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Sea-ice Model&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsR&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! ROMS&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsW&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;                  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Wave Model&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled &#039;&#039;&#039;ESM&#039;&#039;&#039; components identification indices.&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idriver&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iatmos&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Idata&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iseaice&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iwave&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Generic &#039;&#039;&#039;ESM&#039;&#039;&#039; component labels used in the &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CASE&amp;lt;/span&amp;gt; constructs.  We cannot use the identification indices because the vector &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms(:)&amp;lt;/span&amp;gt; cannot be defined as a parameter and a non constant expression is illegal: &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;CASE&amp;lt;/span&amp;gt; ( &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) : &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iroms&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NgridsR&amp;lt;/span&amp;gt;) )&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 3), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Clabel(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len=&amp;lt;/span&amp;gt;10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Cmodel(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Number of ROMS export and import fields per component. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nexport(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nimport(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Model coupling type: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] Explicit, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;otherwise&amp;lt;/span&amp;gt;] Semi-Implicit. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;explicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined using known values from the time-step before it. Explicit methods require less computational effort and are accurate for small coupling time-steps. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;implicit coupling&amp;lt;/span&amp;gt;, exchange fields at the next time-step are defined by including values at the next time-step. Implicit methods are stable and allow longer coupling time-steps but are more computationally expensive. In &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;semi-implicit coupling&amp;lt;/span&amp;gt;, &#039;&#039;&#039;ROMS -&amp;gt; ATM&#039;&#039;&#039; is explicit, &#039;&#039;&#039;ATM -&amp;gt; ROMS&#039;&#039;&#039; is implicit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplingType&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Distributed-memory communicator handle for each component, Total number of PETs needed in concurrent PET layout, rank of each PET, and PET layout (sequential or concurrent). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMcomm(:)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;sumPETs&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETrank&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=10) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PETlayoutOption&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Driver clock parameters specified in configuration script. A integer vector with six elements: (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) year including century, like 2017; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;) month of the year, 1 to 12; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;) day of the month; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;) hour of the day, 0 to 23; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;) minutes of the hour, 0 to 59; and (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;) seconds of the minute, 0 to 59 &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceDate&amp;lt;/span&amp;gt;(6)          &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! reference date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RestartDate&amp;lt;/span&amp;gt;(6)            &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! restarting date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StartDate&amp;lt;/span&amp;gt;(6)              &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! starting date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;StopDate&amp;lt;/span&amp;gt;(6)               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! stopping date&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TimeStep&amp;lt;/span&amp;gt;(6)               &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling interval&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Today date string. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=44) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TodayDateString&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; coupling simulation reference date number, element: (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;) seconds, and (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;) fractional days&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ReferenceDateNumber&amp;lt;/span&amp;gt;(2)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;DATA&#039;&#039;&#039; component parallel distributed-memory domain partions in the &#039;&#039;&#039;I&#039;&#039;&#039;- and &#039;&#039;&#039;J&#039;&#039;&#039;-directions (lon,lat).  &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ItileD&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;JtileD&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling debugging flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no debugging, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports informative messages, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;1&#039;&amp;lt;/span&amp;gt; plus writes grid information in &#039;&#039;&#039;VTK&#039;&#039;&#039; format,  [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;2&#039;&amp;lt;/span&amp;gt; plus writes exchage fields into &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;DebugLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Execution tracing level flag: [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;] no tracing, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;] reports sequence of coupling subroutine calls, or [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;] &amp;lt;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;gt; plus writes voluminous &#039;&#039;&#039;ESMF&#039;&#039;&#039; library tracing information which slowdown performace, and creates large log file. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TraceLevel&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Switch to trace/track run sequence during debugging.  All information is written to Fortan unit &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt;. For now, use standard output unit. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;logical&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESM_track&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;.FALSE.&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence switch&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;trac&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;             &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! trace/track CALL sequence unit&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupled model staggered grid-cell type indices. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inan&amp;lt;/span&amp;gt;    = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! unstaggered, cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icenter&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell center&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Icorner&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! cell corners&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iupoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! right and left cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ivpoint&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! upper and lower cell faces&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=6), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;GridType&amp;lt;/span&amp;gt; =                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;N/A&amp;lt;/span&amp;gt;   &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Corner&amp;lt;/span&amp;gt;&#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;U&amp;lt;/span&amp;gt;     &#039;,                 &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;V&amp;lt;/span&amp;gt;     &#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;REGRID&#039;&#039;&#039; interpolation method between source and destination fields. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Inone&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! none&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ibilin&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! bilinear&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ipatch&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! high-order patch recovery&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iconsv1&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! first-order conservative&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iconsv2&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! second-order conservative&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;InStoD&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearest neighbor Src to Dst&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;InDtoS&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearest neighbor Dst to Src&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=4), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:6) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IntrpType&amp;lt;/span&amp;gt; =                  &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NONE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;BLIN&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;PTCH&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CNS1&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CNS2&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NS2D&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ND2S&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
** Extrapolation method for unmapped destination points. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Enone&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! none&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExStoD&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! nearear neighbor Src to Dst&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Eidavg&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! inverse distance average&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ecreep&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! creep fill&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;E2steps&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;     &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! Turuncoglu two steps&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=4), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(0:4) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExtrpType&amp;lt;/span&amp;gt; =                  &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                     (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NONE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NS2D&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;IDAV&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CREE&amp;lt;/span&amp;gt;&#039;,                   &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                        &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2STP&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  The number of levels to output for the extrapolation methods that fill levels, like creep fill (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMF_EXTRAPMETHOD_CREEP&amp;lt;/span&amp;gt;). Unmapped destination points are supplied by repeatedly moving data from mapped locations to neighboring unmapped locations for a user-specified number of levels.  For each creeped point, its value is the average of the values of the immediate neighbors from the mapped points from regridding (&#039;&#039;&#039;ESMF&#039;&#039;&#039; Reference Manual, v &#039;&#039;&#039;8.0.0&#039;&#039;&#039;). &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;extrapNumLevels&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Interpolation connectors mask interaction flags. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverLand&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverOcean&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OverAll&amp;lt;/span&amp;gt;   = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=3), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(3) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MaskType&amp;lt;/span&amp;gt; =                     &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                   (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;LND&amp;lt;/span&amp;gt;&#039;,                      &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;OCN&amp;lt;/span&amp;gt;&#039;,                      &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ALL&amp;lt;/span&amp;gt;&#039;/)&amp;lt;/div&amp;gt;&lt;br /&gt;
** Coupling run mode: sequential or concurrent. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Iseq&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Ipar&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (len=10), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;dimension&amp;lt;/span&amp;gt;(2) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;RunMode&amp;lt;/span&amp;gt; =                     &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                   (/ &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;SEQUENTIA&amp;lt;/span&amp;gt;L&#039;,               &amp;amp;&amp;lt;br /&amp;gt;     &amp;amp;                                      &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONCURRENT&amp;lt;/span&amp;gt;&#039; /)&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Compling standard input parameters filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CinpName&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;ESM&#039;&#039;&#039; free-format run sequence configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;       &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256) :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CONFname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** ROMS coupling &#039;&#039;&#039;YAML&#039;&#039;&#039; configuration filename. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CPLname&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Standard input filename for each coupled model, [&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Nmodels&amp;lt;/span&amp;gt;]. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=256), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;allocatable&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;INPname(:)&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
** Standard output units and log messages filename for coupler and &#039;&#039;&#039;ESMF&#039;&#039;&#039; library. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cplout&amp;lt;/span&amp;gt;  = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! coupling driver&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dataout&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;77&amp;lt;/span&amp;gt;         &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;! data component&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 8), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ESMnameLog&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;log.esmf&amp;lt;/span&amp;gt;&#039;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;= 8), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;CouplerLog&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;log.coupler&amp;lt;/span&amp;gt;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  Output &#039;&#039;&#039;NetCDF&#039;&#039;&#039; file used to store field snapshot attributes needed for time interpolation by the &#039;&#039;&#039;ESM&#039;&#039;&#039; component kernel during concurrent coupling. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;=17), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;AttFileName&amp;lt;/span&amp;gt; = &#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;time_intrp_att.nc&amp;lt;/span&amp;gt;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
**  &#039;&#039;&#039;ESM&#039;&#039;&#039; single and double precision constants. &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;99_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;integer&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;i4b&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;UNMAPPED_MASK&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;98_i4b&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;MISSING_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;1.0E20_r8&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;dp&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_dp&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_dp&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r4&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r4&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r4&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;      &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;r8&amp;lt;/span&amp;gt;), &amp;lt;span class=&amp;quot;darkTurquoise&amp;quot;&amp;gt;parameter&amp;lt;/span&amp;gt; :: &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;TOL_r8&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;0.5E20_r8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module contains a set of subroutines that are required by &#039;&#039;&#039;NUOPC&#039;&#039;&#039;. According to a predefined calling sequence, these subroutines are called by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; infrastructure. Some subroutines are called during the initialization of the coupled system, some during the run of the coupled system, and some during the finalization of the coupled system.&lt;br /&gt;
&lt;br /&gt;
The initialization sequence is the most complex and is governed by the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; technical rules. Details about the initialization sequence can be found in the &#039;&#039;&#039;NUOPC&#039;&#039;&#039; Reference Manual. The ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; requires &#039;&#039;&#039;ESMF version 8 or higher&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=&amp;quot;1000&amp;quot;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetServices&amp;lt;/span&amp;gt; &lt;br /&gt;
|Entry point to the ROMS &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; and the only &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; routine. It sets the ROMS component chared-object entry points for using &#039;&#039;&#039;NUOPC&#039;&#039;&#039; generic methods for &#039;&#039;&#039;initialize&#039;&#039;&#039;, &#039;&#039;&#039;run&#039;&#039;&#039;, and &#039;&#039;&#039;finalize&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 1 initialization which sets import and export fields long and short names into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP2&amp;lt;/span&amp;gt;&lt;br /&gt;
|ROMS component phase 2 initialization which initializes the ROMS component (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_initialize&amp;lt;/span&amp;gt;), sets component grid (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;), and adds fields into import and export into respective states.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_DataInit&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS component fields during initialization or restart.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component date calendar, start and stop times, and coupling interval.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetRunClock&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS run clock manually to avoid getting zero time stamps at the first regridding call.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_CheckImport&amp;lt;/span&amp;gt;&lt;br /&gt;
|Checks if ROMS component import field is at the correct time.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetGridArrays&amp;lt;/span&amp;gt;&lt;br /&gt;
|Sets ROMS component staggered, horizontal grid arrays, grid area, and land/sea mask if any.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetStates&amp;lt;/span&amp;gt;&lt;br /&gt;
|Adds ROMS component &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields into its respective state.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_ModelAdvance&amp;lt;/span&amp;gt;&lt;br /&gt;
|Advances ROMS component for a coupling interval. It calls &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt; routines.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetFinalize&amp;lt;/span&amp;gt;&lt;br /&gt;
|Finalizes ROMS component execution.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Import&amp;lt;/span&amp;gt;&lt;br /&gt;
|Loads import fields into ROMS internal kernel arrays.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Export&amp;lt;/span&amp;gt;&lt;br /&gt;
|Exports ROMS fields to other gridded components.&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_Rotate&amp;lt;/span&amp;gt;&lt;br /&gt;
|Rotates vector components from computational grid to geographical EAST and NORTH directions or vice versa.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;NUOPC&amp;lt;/span&amp;gt; cap modules are available within the ROMS native framework:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;ESMF/NUOPC Modules&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Tested&#039;&#039;&#039;&lt;br /&gt;
|style=&amp;quot;width: 700px;&amp;quot; align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_driver.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; Master Driver&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_esm.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Sets &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; &#039;&#039;&#039;Services&#039;&#039;&#039; and &#039;&#039;&#039;RunSequence&#039;&#039;&#039; for each coupled component&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/esmf_coupler.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| &#039;&#039;&#039;Computes&#039;&#039;&#039;, &#039;&#039;&#039;Execute&#039;&#039;&#039;, and &#039;&#039;&#039;Release&#039;&#039;&#039; the &#039;&#039;&#039;Connectors&#039;&#039;&#039; between &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;source&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;destination&amp;lt;/span&amp;gt; fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;Master/mod_esmf_esm.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines framework object &#039;&#039;&#039;structures&#039;&#039;&#039; and &#039;&#039;&#039;variables&#039;&#039;&#039; and includes support routines&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_coamps.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Coupled Ocean-Atmosphere Mesoscale Prediction System (&#039;&#039;&#039;COAMPS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_coamps.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Coupled Ocean-Atmosphere Mesoscale Prediction System (&#039;&#039;&#039;COAMPS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_regcm.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| ICTP Regional Climate Model (&#039;&#039;&#039;RegCM&#039;&#039;&#039;, Version &#039;&#039;&#039;4.5&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_atm_wrf.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Weather Research and Forecasting model (&#039;&#039;&#039;WRF&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_data.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generic &#039;&#039;&#039;DATA&#039;&#039;&#039; component via &#039;&#039;&#039;NetCDF&#039;&#039;&#039; files&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_ice_cice.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| Los Alamos Sea Ice Model (&#039;&#039;&#039;CICE&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_roms.F&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;forestGreen&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&lt;br /&gt;
| Regional Ocean Modeling System (&#039;&#039;&#039;ROMS&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_wav_wam.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| ECMWF&#039;s Wave Model (&#039;&#039;&#039;WAM&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;Master/esmf_wav_ww3.h&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&lt;br /&gt;
| WaveWatch III (&#039;&#039;&#039;WW3&#039;&#039;&#039;), &amp;lt;span class=&amp;quot;twilightBlue&amp;quot;&amp;gt;under development&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Import and Export Fields==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; fields are configured and specified in the &#039;&#039;&#039;YAML&#039;&#039;&#039; file [[coupling_esmf_atm.yaml]]. Check the following [[coupling_esmf_atm.yaml|wikiROMS]] page for detailed information.  The user has full control of the coupling exchange fields metadata.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;ESMF/NUOPC&#039;&#039;&#039; library version &#039;&#039;&#039;8.0.0&#039;&#039;&#039; or higher supports native nesting capabilities.  The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; layer now allows coupling sets in the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;export&amp;lt;/span&amp;gt; states of the &#039;&#039;&#039;ESM&#039;&#039;&#039; components. A nested grid is represented as another &#039;&#039;&#039;ESMF_Grid&#039;&#039;&#039; object so that a coupled model can have a set of telescoping meshes of decreasing spatial resolution. The &#039;&#039;&#039;NUOPC&#039;&#039;&#039; connector can recognize the different grids and exchange fields to a connected &#039;&#039;&#039;ESM&#039;&#039;&#039; component. Various types of connections are possible, like nest-to-nest, fine-to-coarse, or coarse-to-fine. The user decides which nested grids to connect. The &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;NUOPC_AddNestedState&amp;lt;/span&amp;gt; routine is used to advertise the nested couple sets.&lt;br /&gt;
&lt;br /&gt;
For example, the ROMS &#039;&#039;&#039;NOUPC&#039;&#039;&#039; &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;cap&amp;lt;/span&amp;gt; module routine &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS_SetInitializeP1&amp;lt;/span&amp;gt; illustrates how easily the coupled sets is added to the &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ImportState&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;ExportState&amp;lt;/span&amp;gt; as shown below in the green blocks of code. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:ImportCoupledStates.png]]&lt;br /&gt;
|[[Image:ExportCoupledStates.png]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6532</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6532"/>
		<updated>2022-05-19T13:21:40Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first assignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdjointGroup.jpg|1000px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;ROMS Adjoint Group:&#039;&#039;&#039;&#039;&#039; Back, left to right: Arthur J. Miller, Andrew M. Moore, Bruce D. Cornuelle, and Douglas J. Neilson. Front: Hernan G. Arango and Emanuel Di Lorenzo. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long perturbation, tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Moreover, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm. The finite-amplitude, tangent linear code for the Representer model (&#039;&#039;&#039;RPM&#039;&#039;&#039;) was later derived from the &#039;&#039;&#039;TLM&#039;&#039;&#039;. The &#039;&#039;&#039;RPM&#039;&#039;&#039; is used in the indirect, representer-based approach for 4-Dimensional Variational (&#039;&#039;&#039;4D-Var&#039;&#039;&#039;) data assimilation.&lt;br /&gt;
&lt;br /&gt;
To be continued ...&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;DiLorenzo_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Di Lorenzo, E., A. M. Moore, H. G. Arango, B. D. Cornuelle, A. J. Miller, B. Powell, B. S. Chua, and A. F. Bennett, 2007: Weak and strong constraint data assimilation in the inverse Regional Ocean Modeling System (ROMS): Development and application for a baroclinic coastal upwelling system, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;16&#039;&#039;&#039;, doi:10.1016/j.ocemod.2006.08.002. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Levin, and H.G. Arango, and J. Wilkin, 2021: Assessing the performance of an ocean observing, analysis and forecast System for the Mid-Atlantic Bight using array modes, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;164&#039;&#039;&#039;, doi:10.1016/j.ocemod.2021.101821&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6531</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6531"/>
		<updated>2022-05-18T15:39:09Z</updated>

		<summary type="html">&lt;p&gt;Arango: /* ROMS Selected References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first assignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdjointGroup.jpg|1000px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;ROMS Adjoint Group:&#039;&#039;&#039;&#039;&#039; Back, left to right: Arthur J. Miller, Andrew M. Moore, Bruce D. Cornuelle, and Douglas J. Neilson. Front: Hernan G. Arango and Emanuel Di Lorenzo. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long perturbation, tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Moreover, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm. The finite-amplitude, tangent linear code for the Representer model (&#039;&#039;&#039;RPM&#039;&#039;&#039;) was later derived from the &#039;&#039;&#039;TLM&#039;&#039;&#039;. The &#039;&#039;&#039;RPM&#039;&#039;&#039; is used in the indirect, representer-based approach for 4-Dimensional Variational (&#039;&#039;&#039;4D-Var&#039;&#039;&#039;) data assimilation.&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;DiLorenzo_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Di Lorenzo, E., A. M. Moore, H. G. Arango, B. D. Cornuelle, A. J. Miller, B. Powell, B. S. Chua, and A. F. Bennett, 2007: Weak and strong constraint data assimilation in the inverse Regional Ocean Modeling System (ROMS): Development and application for a baroclinic coastal upwelling system, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;16&#039;&#039;&#039;, doi:10.1016/j.ocemod.2006.08.002. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Levin, and H.G. Arango, and J. Wilkin, 2021: Assessing the performance of an ocean observing, analysis and forecast System for the Mid-Atlantic Bight using array modes, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;164&#039;&#039;&#039;, doi:10.1016/j.ocemod.2021.101821&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6530</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6530"/>
		<updated>2022-05-18T13:18:48Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first assignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdjointGroup.jpg|1000px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;ROMS Adjoint Group:&#039;&#039;&#039;&#039;&#039; Back, left to right: Arthur J. Miller, Andrew M. Moore, Bruce D. Cornuelle, and Douglas J. Neilson. Front: Hernan G. Arango and Emanuel Di Lorenzo. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long perturbation, tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Moreover, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm. The finite-amplitude, tangent linear code for the Representer model (&#039;&#039;&#039;RPM&#039;&#039;&#039;) was later derived from the &#039;&#039;&#039;TLM&#039;&#039;&#039;. The &#039;&#039;&#039;RPM&#039;&#039;&#039; is used in the indirect, representer-based approach for 4-Dimensional Variational (&#039;&#039;&#039;4D-Var&#039;&#039;&#039;) data assimilation.&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6529</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6529"/>
		<updated>2022-05-18T02:35:50Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first ssignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdjointGroup.jpg|1000px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;ROMS Adjoint Group:&#039;&#039;&#039;&#039;&#039; Back, left to right: Arthur J. Miller, Andrew M. Moore, Bruce D. Cornuelle, and Douglas J. Neilson. Front: Hernan G. Arango and Emanuel Di Lorenzo. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long perturbation, tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Moreover, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm. The finite-amplitude, tangent linear code for the Representer model (&#039;&#039;&#039;RPM&#039;&#039;&#039;) was later derived from the &#039;&#039;&#039;TLM&#039;&#039;&#039;. The &#039;&#039;&#039;RPM&#039;&#039;&#039; is used in the indirect, representer-based approach for 4-Dimensional Variational (&#039;&#039;&#039;4D-Var&#039;&#039;&#039;) data assimilation.&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6528</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6528"/>
		<updated>2022-05-18T02:09:37Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first ssignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdjointGroup.jpg|1000px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;ROMS Adjoint Group:&#039;&#039;&#039;&#039;&#039; Back, left to right: Arthur J. Miller, Andrew M. Moore, Bruce D. Cornuelle, and Douglas J. Neilson. Front: Hernan G. Arango and Emanuel Di Lorenzo. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long perturbation, tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Thus, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm. The finite-amplitude, tangent linear code for the Representer model (&#039;&#039;&#039;RPM&#039;&#039;&#039;) was later derived from the &#039;&#039;&#039;TLM&#039;&#039;&#039;. The &#039;&#039;&#039;RPM&#039;&#039;&#039; is used in the indirect, representer-based approach for 4-Dimensional Variational (&#039;&#039;&#039;4D-Var&#039;&#039;&#039;) data assimilation.&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6527</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6527"/>
		<updated>2022-05-18T02:04:54Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first ssignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
[[Image:AdjointGroup.jpg|1000px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;ROMS Adjoint Group:&#039;&#039;&#039;&#039;&#039; Back, left to right: Arthur J. Miller, Andrew M. Moore, Bruce D. Cornuelle, and Douglas J. Neilson. Front: Hernan G. Arango and Emanuel Di Lorenzo. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long perturbation tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Thus, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm. The finite-amplitude, tangent linear code for the Representer model (&#039;&#039;&#039;RPM&#039;&#039;&#039;) was later derived from the &#039;&#039;&#039;TLM&#039;&#039;&#039;. The &#039;&#039;&#039;RPM&#039;&#039;&#039; is used in the indirect, representer-based approach for 4-Dimensional Variational (&#039;&#039;&#039;4D-Var&#039;&#039;&#039;) data assimilation.&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=File:AdjointGroup.jpg&amp;diff=6526</id>
		<title>File:AdjointGroup.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=File:AdjointGroup.jpg&amp;diff=6526"/>
		<updated>2022-05-18T01:44:19Z</updated>

		<summary type="html">&lt;p&gt;Arango: ROMS Original Adjoint Group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
ROMS Original Adjoint Group&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6525</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6525"/>
		<updated>2022-05-18T01:42:43Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first ssignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt;) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, to meet at University of California, Los Angeles (UCLA) with &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
In 2000, Terri Paluszkiewicz from the Office of Naval Research (ONR) approached &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;JCM&amp;lt;/span&amp;gt; about funding opportunities to develop the next generation of a regional, high-resolution ocean model with accurate numerical algorithms and data assimilation capabilities. As a result, ONR started funding &#039;&#039;&#039;ROMS&#039;&#039;&#039; development separately to Rutgers (data assimilation and adjoint-based algorithms, applications, maintenance, and community outreach) and UCLA (numerical algorithms and applications). Then, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; suggested to ONR that a redesign of &#039;&#039;&#039;ROMS&#039;&#039;&#039; was required, and a team of experts was needed to do variational data assimilation correctly. During his years at Harvard, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; had the opportunity to meet Andrew M. Moore (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;), now at the University of California, Santa Cruz (UCSC), and work with Arthur J. Miller (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;) from the Scripps Institute of Oceanography (SIO). &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; is an expert on adjoint-based modeling and applications. Therefore, the &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ROMS&amp;lt;/span&amp;gt; data assimilation team included &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AJM&amp;lt;/span&amp;gt;, collaborator Bruce D. Cornuelle (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;BDC&amp;lt;/span&amp;gt;), and Ph. D. student Emanuele Di Lorenzo (hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;EDL&amp;lt;/span&amp;gt;), and Douglas J. Neilson (Hereafter, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DJW&amp;lt;/span&amp;gt;). ONR also funded UCSC and SIO separately for this work. Thus, it started a very successful collaboration with several peer-reviewed publications in journals and books. The chemistry between the &#039;&#039;&#039;ROMS&#039;&#039;&#039; Data Assimilation (&#039;&#039;&#039;ROMS-DA&#039;&#039;&#039;) group was extraordinary, with lots of fun, good food, and great wine-tasting parties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; frequently traveled to Scripps, in La Jolla, for an intense week-long tangent linear model (&#039;&#039;&#039;TLM&#039;&#039;&#039;) and adjoint model (&amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;ADM&amp;lt;/span&amp;gt;) code writing. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AMM&amp;lt;/span&amp;gt; was the master teaching and directing the monkies on how to write &#039;&#039;&#039;ROMS-TL&#039;&#039;&#039; and &#039;&#039;&#039;ROMS-AD&#039;&#039;&#039; codes. The &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; were hand-coded from the discrete nonlinear (&#039;&#039;&#039;NLM&#039;&#039;&#039;) code using the recipes of Giering and Kaminski (1998). Therefore, any change to its dynamical and numerical kernels will affect the symmetry of the &#039;&#039;&#039;TLM&#039;&#039;&#039; and &#039;&#039;&#039;ADM&#039;&#039;&#039; operators. Thus, the resulting discrete adjoint is exact and is defined relative to the inner product that prescribes the &#039;&#039;&#039;L2&#039;&#039;&#039;-norm.&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
	<entry>
		<id>https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6524</id>
		<title>Regional Ocean Modeling System (ROMS)</title>
		<link rel="alternate" type="text/html" href="https://www.myroms.org/wiki/index.php?title=Regional_Ocean_Modeling_System_(ROMS)&amp;diff=6524"/>
		<updated>2022-05-17T19:59:54Z</updated>

		<summary type="html">&lt;p&gt;Arango: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ROMS History&amp;lt;/div&amp;gt;&lt;br /&gt;
In the fall of 1995,  Hernan G. Arango (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt;) started working at the Ocean Modeling Lab (&#039;&#039;&#039;OML&#039;&#039;&#039;), Institute of Marine and Coastal Sciences (&#039;&#039;&#039;IMCS&#039;&#039;&#039;), Rutgers University. His first ssignment from &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s group leader Dale B. Haigvogel (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt;) was to work on the classic baroclinic, wind-driven, double gyre problem with the now-extinct &#039;&#039;&#039;S&#039;&#039;&#039;-&#039;&#039;&#039;C&#039;&#039;&#039;oordinate &#039;&#039;&#039;R&#039;&#039;&#039;utgers &#039;&#039;&#039;U&#039;&#039;&#039;niversity &#039;&#039;&#039;M&#039;&#039;&#039;odel (&#039;&#039;&#039;SCRUM&#039;&#039;&#039;, Song and Haidvogel, 1994), which was derived from &#039;&#039;&#039;SPEM&#039;&#039;&#039; (&#039;&#039;&#039;S&#039;&#039;&#039;emi-spectral &#039;&#039;&#039;P&#039;&#039;&#039;rimitive &#039;&#039;&#039;E&#039;&#039;&#039;quation &#039;&#039;&#039;M&#039;&#039;&#039;odel; Haidvogel &#039;&#039;et al.&#039;&#039;, 1991). The double-gyre application is affectionately known as &#039;&#039;&#039;Big Bad Basin&#039;&#039;&#039; (nowadays, &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; test case) by several &#039;&#039;&#039;OML&#039;&#039;&#039; modelers because of its stability issues in long simulations. After a couple of months of struggling with the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; problem, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; decided to rewrite &#039;&#039;&#039;SCRUM&#039;&#039;&#039; from scratch and modify its numerical kernel, including time-stepping, advection schemes, and implementing a split-explicit treatment coupling between barotropic (fast) and barotropic (slow) governing equations in collaboration with &#039;&#039;&#039;OML&#039;&#039;&#039;&#039;s scientists Robert J. Chant and Katherine S. Hedström. In addition, a complete overhaul of the model metadata, input, and output files with NetCDF format. And voilà, the &amp;lt;span class=&amp;quot;mediumOrchid&amp;quot;&amp;gt;BASIN&amp;lt;/span&amp;gt; application ran successfully for several years. The new model became &#039;&#039;&#039;SCRUM&#039;&#039;&#039; version &#039;&#039;&#039;3.0&#039;&#039;&#039;, which later evolved to &#039;&#039;&#039;SCRUM 4.0&#039;&#039;&#039; and then becomes the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;O&#039;&#039;&#039;cean &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;ROMS&#039;&#039;&#039;). The acronym &#039;&#039;&#039;ROMS&#039;&#039;&#039; was inspired by the &#039;&#039;&#039;R&#039;&#039;&#039;egional &#039;&#039;&#039;A&#039;&#039;&#039;tmospheric &#039;&#039;&#039;M&#039;&#039;&#039;odeling &#039;&#039;&#039;S&#039;&#039;&#039;ystem (&#039;&#039;&#039;RAMS&#039;&#039;&#039;). Thus, at the time, there was a regional numerical model for the atmosphere and ocean with similar acronyms.&lt;br /&gt;
&lt;br /&gt;
In 1998, James C. McWilliams (UCLA) started looking for a regional ocean model for the U.S. West Coast and contacted &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; for possible collaborations. As a result, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;DBH&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; traveled to Los Angeles, CA, to meet at UCLA with Jim McWilliams and Alexander F. Shchepetkin  (hereafter &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt;) or just Sasha, as the &#039;&#039;&#039;ROMS&#039;&#039;&#039; VIPs know him. The expectation that &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; would get along was very low. However, their mutual respect, skills, and friendship grew. As a result, and to the benefit of the ocean modeling community,  &#039;&#039;&#039;ROMS&#039;&#039;&#039; was officially born. Their first task was to improve its efficiency by implementing a multi-threaded parallel version of its numerical kernel using the shared-memory paradigm native to the IRIX operating system available on SGI supercomputers of the time. The shared-memory compiling directives evolved later to the portable &#039;&#039;&#039;OpenMP&#039;&#039;&#039; standard implementation in &#039;&#039;&#039;ROMS&#039;&#039;&#039;. Moreover, &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;AFS&amp;lt;/span&amp;gt; began looking at the ensemble code and started counting operations; multiplications replaced unnecessary divisions when appropriate, and &#039;&#039;&#039;DO&#039;&#039;&#039;-loops were reorganized and pipelined to reduce memory hits. &amp;lt;span class=&amp;quot;blue&amp;quot;&amp;gt;HGA&amp;lt;/span&amp;gt; learned how to count operations and analyzed optimized Fortran code, which was available at the time, to minimize the need for automatic optimization. As a result, the &#039;&#039;&#039;ROMS&#039;&#039;&#039; code was very efficient and fast. Nowadays, &#039;&#039;&#039;ROMS&#039;&#039;&#039; can be compiled with aggressive Fortran optimization flags. Of course, users need to be aware that the bold optimization flags in some compilers could compromise the numerical &#039;&#039;&#039;IEEE&#039;&#039;&#039; floating-point precision, and new flags are required to retain it, which may slow down the computations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ROMS Releases===&lt;br /&gt;
&lt;br /&gt;
The following table shows information about the infrequent tagged &#039;&#039;&#039;ROMS&#039;&#039;&#039; releases showing its evolution and expansion.  It was redesigned completely starting with version &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; and written in &#039;&#039;&#039;Fortran-1990&#039;&#039;&#039; standard with modules with the &#039;&#039;&#039;derived-type&#039;&#039;&#039; objects with &#039;&#039;&#039;dynamical allocation&#039;&#039;&#039;, and managed with &#039;&#039;&#039;svn&#039;&#039;&#039; repositories instead of &#039;&#039;&#039;cvs&#039;&#039;&#039;. Some features of &#039;&#039;&#039;Fortran-1995&#039;&#039;&#039; and &#039;&#039;&#039;Fortran-2003&#039;&#039;&#039; standards were introduced later when available in mostly all compilers. The perturbation Tangent Linear Model (&#039;&#039;&#039;TLM&#039;&#039;&#039;), finite-amplitude Tangent Linear (Representer) Model (&#039;&#039;&#039;RPM&#039;&#039;&#039;), and adjoint model (&#039;&#039;&#039;ADM&#039;&#039;&#039;) were released in version &#039;&#039;&#039;ROMS 2.3&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Tag Version&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;svn Revision&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Release Date&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Number of Files&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;violet&amp;quot;&amp;gt;Lines of Code&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.1.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;125&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;44,639&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-01-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;130&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;46,905&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-03-15&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;131&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;47,931&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1999-06-20&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;146&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;49,466&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.5.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-02-10&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;145&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,118&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-01-29&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,066&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,123&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.6.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2000-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;144&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;56,283&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-01-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,652&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-02-01&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;165&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;63,573&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.7.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2001-04-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;173&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;66,324&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;cvs -r 1.8.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2002-01-11&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;175&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;67,999&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color: #D0FFD0;&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2003-06-30&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;232&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;95,836&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2004-05-05&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;253&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;117,956&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2005-05-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;297&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;158,176&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-02-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,122&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;399,457&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;36&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2007-04-27&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,313&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;460,643&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;166&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2008-03-17&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,345&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;470,110&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;338&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-03-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,428&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;549,318&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;432&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2009-12-26&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,559&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;603,578&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;550&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-04-19&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,583&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;643,878&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;568&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2011-09-21&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,582&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;648,098&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;656&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2013-04-18&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,638&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;684,351&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;974&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2019-07-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,784&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;844,948&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;995&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2020-01-09&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,799&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;848,245&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1054&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2021-03-06&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,909&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;884,508&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;4.0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1108&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-02-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,985&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,066,953&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;current&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1123&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;2022-04-25&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,989&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;1,079,102&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;May 7, 2022&#039;&#039;&#039;, &#039;&#039;&#039;ROMS&#039;&#039;&#039; had &#039;&#039;&#039;6970&#039;&#039;&#039; registered users at [http://www.myroms.org www.myroms.org]. The histogram below shows the number of new &#039;&#039;&#039;ROMS&#039;&#039;&#039; users per year and the number of countries (&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt; values on top of the bar) where the new users reside.  The tally was started when &#039;&#039;&#039;ROMS 2.0&#039;&#039;&#039; was released on &#039;&#039;&#039;June 30, 2003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:roms_users.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===ROMS Selected References===&lt;br /&gt;
&lt;br /&gt;
The following is an alphabetic list of &#039;&#039;&#039;essential publications&#039;&#039;&#039; describing various aspects of the &#039;&#039;&#039;ROMS&#039;&#039;&#039; algorithms:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;HaidvogelDB_2000a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haidvogel, D. B., H. G. Arango, K. Hedstrom, A. Beckmann, P. Malanotte-Rizzoli, and A. F. Shchepetkin, 2000: Model evaluation experiments in the North Atlantic Basin: Simulations in nonlinear terrain-following coordinates, &#039;&#039;Dyn. Atmos. Oceans&#039;&#039;, &#039;&#039;&#039;32&#039;&#039;&#039;, 239-281. ([http://marine.rutgers.edu/po/Papers/damee_roms1.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;FennelK_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fennel, K., J. Wilkin, J. Levin, J. Moisan, J. O&#039;Reilly, and D. Haidvogel, 2006: Nitrogen cycling in the Middle Atlantic Bight: Results from a three-dimensional model and implications for the North Atlantic nitrogen budget, &#039;&#039;Global Biogeochem. Cycles&#039;&#039;, &#039;&#039;&#039;20&#039;&#039;&#039;, GB3007, doi:10.1029/2005GB002456. ([http://www.myroms.org/Papers/Fennel_etal_gbc.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;GurolS_2014&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gurol, S., A. T. Weaver, A. M. Moore, A. Piacentini, H. G. Arango, and S. Gratton, 2014: B-preconditioned minimization algorithms for variational data assimilation with the dual formulation, &#039;&#039;Q. J. R. Meteorol. Soc.&#039;&#039;, &#039;&#039;&#039;140&#039;&#039;&#039;, 539-556, DOI:10.1002/qj.2150.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2021&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M. and H.G. Arango, 2021: On the behavior of ocean analysis and forecast error covariance in the presence of baroclinic instability, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101733.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=LevinJ_2020a&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2020: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transportin 4D-Var ocean state estimates: Part I – Multiplatform Analysis, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101721.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;LevinJ_2020b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Levin, J., H.G. Arango, B. Laughlin, E. Hunter, J. Wilkin, and A.M. Moore, 2021: Observation impacts on the Mid-Atlantic Bight front and cross-shelf transport in 4D-Var ocean state estimates: Part II - The Pioneer Array, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;157&#039;&#039;&#039;, doi:10.1016/j.ocemod.2020.101731.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2004a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A. M., H. G. Arango, A. J. Miller, B. D. Cornuelle, E. Di Lorenzo and D. J. Neilson, 2004: A Comprehensive Ocean Prediction and Analysis System Based on the Tangent Linear and Adjoint Components of a Regional Ocean Model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;7&#039;&#039;&#039;, 227-258. ([http://marine.rutgers.edu/po/Papers/Moore_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, G. Broquet, B.S. Powell, A.T. Weaver, and J. Zavala-Garay, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data  assimilation systems, Part I - System overview and formulation, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 34-49.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and  P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part II: Performance and application to the California Current System, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 50-73.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2011c&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, and G. Broquet, C. Edwards, M. Veneziani, B.S. Powell, D. Foley, J. Doyle, D. Costa, and P. Robinson, 2011: The Regional Ocean Modeling System (ROMS) 4-dimensional variational data assimilation systems, Part III: Observation Impact and Observation Sensitivity in the California Current System, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 74-94.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2017&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., H.G. Arango, C.A. Edwards, 2017: Reduced-Rank Array Modes of the California Current Observing System, &#039;&#039;J. Geophys. Res. Ocean&#039;&#039;, &#039;&#039;&#039;122&#039;&#039;&#039;, doi:10.1002/2017JC013172.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;MooreAM_2020&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Moore, A.M., J. Zavala-Garay, H.G. Arango, C.A. Edwards, J. Anderson, and T. Hoar, 2020: Regional and basin scale applications of ensemble adjustment Kalman filter and 4D-Var ocean data assimilation systems, &#039;&#039;Progress in Oceanography&#039;&#039;, &#039;&#039;&#039;189&#039;&#039;&#039;, doi:10.1016/j.pocean.2020.102450.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2003a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2003: A method for computing horizontal pressure-gradient force in an oceanic model with a nonaligned vertical coordinate, &#039;&#039;J. Geophys. Res.&#039;&#039;, &#039;&#039;&#039;108&#039;&#039;&#039; (C3), 3090, doi:10.1029/2001JC001047. ([http://marine.rutgers.edu/po/Papers/2001JC001047.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2005: The Regional Ocean Modeling System: A split-explicit, free-surface, topography following coordinates ocean model, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;9&#039;&#039;&#039;, 347-404. ([http://marine.rutgers.edu/po/Papers/Shchepetkin_om05.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2008b&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Shchepetkin, A. F., and J. C. McWilliams, 2008: Computational kernel algorithms for fine-scale, multi-process, long-time oceanic simulations. In: &#039;&#039;Handbook of Numerical Analysis: Computational Methods for the Ocean and the Atmosphere&#039;&#039;, eds. R. Temam &amp;amp; J. Tribbia, Elsevier Science, ISBN-10: 0444518932, ISBN-13: 978-0444518934.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;ShchepetkinAF_2015&amp;quot;&amp;gt;Shchepetkin, A. F., 2015: An Adaptive, Courant-number-dependent Implicit Scheme for Vertical Advection in Oceanic Modeling, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;91&#039;&#039;&#039;, 38-69, doi:10.1016/j.ocemod.2015.03.006.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., Z. Defne, K. Hass, and H. G. Arango, 2013: A wetting and drying scheme for ROMS, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;58&#039;&#039;&#039;, 54-61, 10.1016/j.cageo.2013.05.004.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2013&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J.C., W.R. Geyer, and H.G. Arango, 2010: Using composite grid approach in complex coastal domain to estimate estuarine residence time, &#039;&#039;Computer and Geosciences&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 921-935, doi:10.1016/j.cageo.2009.11.008.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, R. P. Signell, C. K. Harris, and H. G. Arango, 2008: Development of a three-dimensional, regional, coupled wave, current, and sediment-transport model, &#039;&#039;Computers &amp;amp; Geosciences&#039;&#039;, &#039;&#039;&#039;34&#039;&#039;&#039;, 1284-1306.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WarnerJC_2005a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Warner, J. C., C. R. Sherwood, H. G. Arango, and R. P. Signell, 2005a: Performance of four turbulence closure methods implemented using a generic length scale method, &#039;&#039;Ocean Modelling&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039;, 81-113. ([http://marine.rutgers.edu/po/Papers/Warner_2004_om.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;WilkinJL_2006a&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wilkin, J. L., 2006: The summer time heat budget and circulation of southeast New England shelf, &#039;&#039;J. Phys. Oceanog.&#039;&#039;, &#039;&#039;&#039;36&#039;&#039;&#039;, 1997-2011. ([http://marine.rutgers.edu/%7Ewilkin/Wilkin_CBLAST_JPO2006.pdf PDF])&lt;/div&gt;</summary>
		<author><name>Arango</name></author>
	</entry>
</feed>